三羊献瑞
观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
(如果有对齐问题,可以参看【图1.jpg】)
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
#include<stdio.h> #include<string.h> #include<ctype.h> #include<math.h> int a[10],b[10],c[10]; void aa(int n) { int i=0; while(n>0){ a[i++]=n%10; n/=10; } } void bb(int n) { int i=0; while(n>0){ b[i++]=n%10; n/=10; } } int cc(int n) { int i=0; while(n>0){ c[i++]=n%10; n/=10; } if(i!=5) return 0; else return 1; } int a1() { int i,j; for(i=0;i<4;i++){ for(j=0;j<5;j++){ if(i!=j&&j<4&&a[i]==a[j]) return 0; if(i!=2||j!=0){ if(j<4&&a[i]==b[j]) return 0; } if(i==0||i==3){ if(j!=1&&j!=2){ if(a[i]==c[j]) return 0; } } } } return 1; } int bb() { int i,j; for(i=0;i<4;i++){ for(j=0;j<5;j++){ if(j>i&&j<4&&b[i]==b[j]) return 0; if(i==1&&b[i]==c[j]) return 0; } } return 1; } int c1() { int i,j; for(i=0;i<5;i++){ for(j=i+1;j<5;j++){ if(c[i]==c[j]) return 0; } } } int main () { int i,j; for(i=1000;i<=9999;i++){ for(j=1000;j<=9999;j++){ memset(c,0,sizeof(c)); if(cc(i+j)){ memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); aa(i); bb(j); if(b[3]==c[4]&&b[2]==c[3]&&a[1]==c[2]&&a[2]==c[1]&&b[0]==a[2]&&a1()&&bb()&&c1()){ printf(" %d ",i); printf("+%d ",j); printf("----------- "); printf("%d ",i+j); } }else{ } } } return 0; }
最后答案为:1085
代码运行结果如下: