题目大致如下:
???+???=??? ?是1-9的整数,在等式成立的情况下,1-9只能使用一次,不能重复。
代码如下:
#include<stdio.h>
int a[10],book[10],total=0;
void dfs(int step)
{
int i;
//首先是判断边界,当step=10的时候,输出结果。
if(step==10)
{
if(a[1]*100+a[2]*10+a[3]+a[4]*100+a[5]*10+a[6]==a[7]*100+a[8]*10+a[9])
{
total++;
printf("%d%d%d + %d%d%d = %d%d%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
}
return;
}
//第i个盒子的处理
for(i=1;i<=9;i++)
{
if(book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1);//递归调用自己
book[i]=0;//清楚标记
}
}
return;
}
int main()
{
dfs(1);
printf("total:%d",total/2);
return 0;
}
刚学了dfs,巩固一下。