题目:1~9的9位数字,每个数字只能出现一次,要求这样的一个9位的整数:其第一位能被1整除,前两位能被2整除、、、、、依次类推,前9位能被9整除。
分析:用递归的方法实现。递归出口是前i位不能被i整除,或当前位数为9,且能被9整除:
//1~9组成不重复的9位整数,前1位可被1整除,前二位被2整除,依次类推;
#include <iostream>
#include <vector>
using namespace std;
bool b[10] = {false};
vector<int> res; //int: -2147483648~2147483647 ,long long:-9223372036854775808~9223372036854775807;
inline void getcount(int k, int a){ //a是否能整除k;
//cout << "getcount(" << k << "," << a << ")" << endl;
if (k&&a%k != 0) return; //添加一位后不能整除,直接返回;
if (k == 9) { //9位数,且能被9整除,返回;
res.push_back(a); return;
}
for (int i = 1; i < 10; ++i){
if (!b[i]){ //不能重复;
b[i] = true;
getcount(k + 1, a * 10 + i);
b[i] = false;
}
}
}
int main(){
getcount(0, 0);
for (int i = 0; i < res.size();++i)
cout << res[i] << endl;
system("pause");
return 0;
}