/*三羊献瑞
观察下面的加法算式:
祥 瑞 生 辉
+ 三 羊 献 瑞
-------------------
三 羊 生 瑞 气
(如果有对齐问题,可以参看【图1.jpg】)
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。1085*/
/*一共有8种不同的数字,可以设一个长度为8的整形数组a,设需要输出的为a[0]~a[3]。
从a[0]开始依次填充,每次符合条件继续填充下一个。*/
public class Main {
public static void main(String[] args) {
int a[]=new int[8];
for(int i=0;i<8;i++) {
a[i]=0;
}
fun(a,0);
}
public static void fun(int a[],int n) {
//递归出口
if(n==8) {
if(check_sum(a)) {
System.out.println(a[0]+" "+a[1]+" "+a[2]+" "+a[3]);
return;
}
}else {
for(int i=0;i<10;i++) {
a[n]=i;
if(check(a,n))
fun(a,n+1);
}
}
}
//检查相同的汉字代表相同的数字,不同的汉字代表不同的数字。
public static boolean check(int a[],int n) {
boolean flag=true;
if(n==0) {
//首元素为0,则返回false
if(a[n]==0)
flag=false;
}else {
for(int i=0;i<n;i++) {
//两元素相等,则返回false
if(a[i]==a[n]) {
flag=false;
break;
}
}
if(n==4&&a[n]==0)
flag=false;
}
return flag;
}
//检查算式是否相等
public static boolean check_sum(int a[]) {
int x=1000*a[4]+100*a[3]+10*a[5]+a[6];
int y=1000*a[0]+100*a[1]+10*a[2]+a[3];
int z=10000*a[0]+1000*a[1]+100*a[5]+10*a[3]+a[7];
if((x+y)==z) {
return true;
}else {
return false;
}
}
}
6-3 三羊献瑞Java
猜你喜欢
转载自blog.csdn.net/qq_41629684/article/details/88615139
今日推荐
周排行