观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你输出“三羊献瑞”所代表的4位数字(答案唯一),不要输出任何多余内容。
若表达式不清楚,可参见下图。
输入
没有输入。
输出
输出一个数字,即“三羊献瑞”所代表的4位数字。
题目限制
1s, 1024KiB for each test case.
提示
用printf或cout输出答案。
很明显本题为一道排列并组合的板子题,本文用了最简单的思路,不过代码看着稍显繁琐哦。排列并组合模板如何使用可参考此博客:
代码:
#include
void disp(int b[])
{
printf("%d%d%d%d",b[4],b[5],b[6],b[1]);
printf("\n");
}
void process(int b[])
{
int a1 = b[0]*1000 + b[1]*100 + b[2]*10 +b[3];
int a2 = b[4]*1000 + b[5]*100 + b[6]*10 +b[1];
int sum = b[4]*10000 + b[5]*1000 + b[2]*100 + b[1]*10 + b[7];
if((a1+a2 == sum) && b[0]!=0 && b[4]!=0)
{
disp(b);
}
}
int main ()
{
int a[]={0,1,2,3,4,5,6,7,8,9};
int d[8];
int len = 10;
int z,x,c,v,b,n,m,l;
for(z=0;z<len;z++)
{
for(x=0;x<len;x++)
{
if(x==z)continue;
for(c=0;c<len;c++)
{
if(c==z || c==x)continue;
for(v=0;v<len;v++)
{
if(v==z || v==x || v==c )continue;
for(b=0;b<len;b++)
{
if(b==z || b==x || b==c || b==v)continue;
for(n=0;n<len;n++)
{
if(n==z || n==x || n==c || n==v || n==b)continue;
for(m=0;m<len;m++)
{
if(m==z || m==x || m==c || m==v || m==b || m==n)continue;
for(l=0;l<len;l++)
{
if(l==z || l== x || l==c || l==v || l==b || l==n || l==m)continue;
d[0]=a[z];d[1]=a[x];d[2]=a[c];d[3]=a[v];d[4]=a[b];
d[5]=a[n];d[6]=a[m];d[7]=a[l];
process(d);
}
}
}
}
}
}
}
}
}
答案:1085