蓝桥杯省赛真题2015年第六届Java本科B组第03题——三羊献瑞

蓝桥杯省赛真题2015年第六届Java本科B组

第03题——三羊献瑞

观察下面的加法算式:

      祥 瑞 生 辉
  +   三 羊 献 瑞
-------------------
   三 羊 生 瑞 气

(如果有对齐问题,可以参看【图1.jpg】)
在这里插入图片描述

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

思路

方法一、暴力枚举然后检查,思路如图,注意枚举的时候要判断不互相等
在这里插入图片描述
方法二、利用数学方法可以推算出个别的数
e=1,a=9,f=0这三个是可以推算出来的,因为e是两个数字相加,一定是进位为1,最大的一位数就是9,所以a+e想进位的话,a只能为9(这里可能有人又疑问:如果b+f进位了,那a+e+进的那一个数呢?,如果b+f有进位,加法最多进一个1,则a+e+进位的结果最大为11,如果没有进位就是等于10,但是因为e一定是1,且题目说数字不能重复,所以a只能为9,f只能为0,即a+e的结果只能为10),则f就为0,c=b+1,c+g>10

代码

这里就不写第一种暴力枚举了,根据第二种方法枚举少一点的来写
已知的有:e=1,a=9,f=0,c=b+1,c+g>10

package06届蓝桥杯省赛2015;

public class Question03 {
    
    

	public static void main(String[] args) {
    
    
		for (int b = 2; b < 9; b++) {
    
    
			for (int d = 0; d < 9; d++) {
    
    
				if (b==d) continue;
				
				for (int g = 2; g < 9; g++) {
    
    
					if (g==b||g==d) continue;
					int c = b+1;
					if (c==b||c==d||c==g) continue;
					if (c+g<=10) continue;
					
					int sum = 9000+b*100+c*10+d+1000+g*10+b;
					for (int i = 2; i < 9; i++) {
    
    
						if (i == b||i == d || i==g || i == c) continue;
						if (sum==(10000+c*100+b*10+i)) {
    
    
							System.out.printf("%2d%d%d%d\n",9,b,c,d);
							System.out.printf("%2d%d%d%d\n",1,0,g,b);
							System.out.printf("%d\n",sum);
							System.out.printf("-----------------\n");
						}
					}
				}
			}
			
		}
	}

}

结果

在这里插入图片描述

1085

猜你喜欢

转载自blog.csdn.net/qq_43594119/article/details/108941773