题目:三位数加三位数等于三位数,这九个数字用1-9,不重复,有多少种方法?(两个加数交换算同一种)
代码:
(一)穷举:
#include<bits/stdc++.h>
using namespace std;
int a[10],sum,total;
bool b[10];
int main()
{
for(a[1]=1;a[1]<=9;a[1]++)
for(a[2]=1;a[2]<=9;a[2]++)
for(a[3]=1;a[3]<=9;a[3]++)
for(a[4]=1;a[4]<=9;a[4]++)
for(a[5]=1;a[5]<=9;a[5]++)
for(a[6]=1;a[6]<=9;a[6]++)
for(a[7]=1;a[7]<=9;a[7]++)
for(a[8]=1;a[8]<=9;a[8]++)
for(a[9]=1;a[9]<=9;a[9]++)
{
for(int i=1;i<=9;i++)
b[i]=0;
for(int i=1;i<=9;i++)
b[a[i]]=1;
sum=0;
for(int i=1;i<=9;i++)
sum=sum+b[i];
if(sum==9&&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++,cout<<a[1]<<a[2]<<a[3]<<"+"<<a[4]<<a[5]<<a[6]<<"="<<a[7]<<a[8]<<a[9]<<endl;
}
cout<<total/2;
return 0;
}
(二)搜索:
#include<bits/stdc++.h>
using namespace std;
int a[10],book[10],total;
void dfs(int step)
{
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++,cout<<a[1]<<a[2]<<a[3]<<"+"<<a[4]<<a[5]<<a[6]<<"="<<a[7]<<a[8]<<a[9]<<endl;
return;
}
for(int 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;
return 0;
}