6-3 三羊献瑞Java

/*三羊献瑞
观察下面的加法算式:
      祥 瑞 生 辉
+     三 羊 献 瑞
-------------------
   三 羊 生 瑞 气
(如果有对齐问题,可以参看【图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;
		}
	}
}

我确信,你的一个关注,能让我开心好久,好久。o(*≧▽≦)ツ

猜你喜欢

转载自blog.csdn.net/qq_41629684/article/details/88615139
6-3
今日推荐