题目: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; }