1-9的九个数排列

时间:2022-11-05 19:46:18

问题:1~9的9个数字,每个数字只出现一次,要求:第一位能被1整除,前两位能被2整除,。。。前9位能被9整除。

思路:回溯法的简单例子。

#include<iostream>
#include<vector>
using namespace std;

int visited[10]={0};//记录版——0

vector<int> iVec;

void func(int a, int len){

if(len==9 && a%9==0){//终止条件——1
iVec.push_back(a);
return ;
}
for(int i=1;i<=9;++i){
if(!visited[i] && (a*10+i)%(len+1)==0 ){//可行条件——2
visited[i]=1;//尝试——3
func(a*10+i,len+1);
visited[i]=0;//回溯——4
}
}
return ;

}

int main(){

func(0,0);
for(vector<int>::iterator iter=iVec.begin();
iter!=iVec.end();++iter)
cout<<*iter<<endl;

return 0;
}