奥数等式:暴力穷举法
abc+def=hig 将数字1~9分别填入,每个数字只能使用一次使得等式成立。例如784+152=936就是一个合理
的组合,请问一共有多少种合理的组合?注意784+152=936和152+784=459是同一种组合。
abc+def=hig 将数字1~9分别填入,每个数字只能使用一次使得等式成立。例如784+152=936就是一个合理
的组合,请问一共有多少种合理的组合?注意784+152=936和152+784=459是同一种组合。
根据枚举思想我们只需要枚举每一位上所有可能的数就好了。用一个flag数组来标记解决互不相等的问题。
#include<iostream>
using namespace std;
int main()
{
int num[10],total=0,flag[10],sum;
for(num[1]=1;num[1]<=9;num[1]++)
for(num[2]=1;num[2]<=9;num[2]++)
for(num[3]=1;num[3]<=9;num[3]++)
for(num[4]=1;num[4]<=9;num[4]++)
for(num[5]=1;num[5]<=9;num[5]++)
for(num[6]=1;num[6]<=9;num[6]++)
for(num[7]=1;num[7]<=9;num[7]++)
for(num[8]=1;num[8]<=9;num[8]++)
for(num[9]=1;num[9]<=9;num[9]++)
{
for (int i=1;i<=9;i++)
{
flag[i]=0;
}
for (i=1;i<=9;i++)
{
if (flag[num[i]]==1)
{
break;
}
else
{
flag[num[i]]=1;
}
}
sum=0;
for (i=1;i<=9;i++)
{
sum+=flag[i];
}
if (sum==9&&(num[1]*100+num[2]*10+num[3]+num[4]*100+num[5]*10+num[6]==num[7]*100+num[8]*10+num[9]))
{
total++;
cout<<num[1]<<num[2]<<num[3]<<"+"<<num[4]<<num[5]<<num[6]<<"="<<num[7]<<num[8]<<num[9]<<endl;
}
}
cout<<total/2<<endl;
}