下面等式:
???+???=???,将数字1~9分别填入9个?中,每个数字只能使用一次使得等式成立。
例如:173+286=459 和 286+173=459 是同一个组合。
#include <iostream>
using namespace std;
int a[10],book[10],total=0;
void dfs(int step)
{
int i;
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++; //如果满足,可行解+1,并打印出这个解
cout<<a[1]<<a[2]<<a[3]<<"+"<<a[4]<<a[5]<<a[6]<<"="<<a[7]<<a[8]<<a[9]<<endl;
}
return;
}
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);
cout<<"共"<<total/2`<<"种方法"<<endl;
return 0;
}
运行结果: