题目描述
求九位累进可除数。所谓九位累进可除数就是这样一个数:这个数用到1到9这九个数字组成,每个数字刚好只出现一次。这九个位数的前两位能被2整除,前三位能被3整除,......,前N位能被N整除,整个九位数能被9整除。
输入
无
输出
九位累进可除数。
#include <stdio.h>
#include<string.h>
int x[200],cur,n;
int c[100];
int flag=0;
int constraint(int t)
{ int j;
for(j=1;j<=t-1;j++)
if(x[t]==x[j])return 0;
return 1;
}
void backtrack (int t)
{
int i;
if(flag) return;
if (t-1==9) {flag=1;printf("%d\n",cur); return;}
for (i=1;i<=9;i++)
{
x[t]=i;
if(t==1) cur=i;
if (constraint(t))
{
if(t==1)
backtrack(t+1);
else
if((cur*10+i)%t==0)
{
cur=cur*10+i; //准备进入下一层,可能还需要为进入下一层,设置好一些状态
backtrack(t+1);
cur/=10; //返回,可能还需要恢复状态
}
}
}
}
int main()
{ int i;
memset(x,0,sizeof(x));
for(i=1;i<=9;i++) c[i]=i;
backtrack(1);
return 0;
}