百度面试题:1-9的9个数字,每个数字只能出现一次
要求这样一个9位数:其第一位能被1整除,前两位能被2整除,前三位能被3整除。。。。依次类推,前9位能被9整除。
//动态规划
#include <iostream>
#include <vector>
using namespace std;
bool used[10];//关键字为i,键值为1,表示i已被用过;键值为0,表示i未被使用
vector<long long> v;
void dfs(int k,long long a)//k表示第k位
{
if(k&&a%k!=0) return;//返回不能整除的情况
if(k==9)//当已经计算到第9位时,数据a入vector,返回函数
{
v.push_back(a);
return;
}
for(int i=1;i<=9;i++)
{
if(!used[i])
{
used[i]=1;
dfs(k+1,a*10+i);//递归调用函数
used[i]=0;
}
}
}
int main()
{
dfs(0,0);
for(int i=0;i<v.size();i++)
printf("%lld",v[i]);
return 0;
}