你好呀,我是灰小猿,一個超會寫bug的程式猿!
歡迎大家關注我的專欄“每日藍橋”,該專欄的主要作用是和大家分享近幾年藍橋杯省賽及決賽等真題,決議其中存在的演算法思想、資料結構等內容,幫助大家學習到更多的知識和技術!
標題:三羊獻瑞
觀察下面的加法算式:
祥 瑞 生 輝
+ 三 羊 獻 瑞
------------------------
三 羊 生 瑞 氣
(如果有對齊問題,可以參看【圖1.jpg】)
其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字,
請你填寫“三羊獻瑞”所代表的4位數字,(答案唯一),不要填寫任何多余內容
解題思路:
這道題的抽象性比較強,所以我們可以將題目換個式子進行表示,將題中的漢字換成字母來表示,我們可以按照加法的思想來推斷這個式子中字母所代表的數字,如下圖所示:
如:兩個四位數相得到了一個五位數,那么這個五位數的第一位一定是1,也就是說e=1,既然e=1且a+e應該是能夠進位的才對,也就是a+e>=10,當e=1時顯然只有a=9符合條件;這時得到f=0,當f=0時,b+f=c,且b一定是不等于c的,這就說明b是得到了一個進位的,即c=b+1,既然是進位,那么c+g只有大于10的時候才會進位,之所以不能等于10,是因為f=0導致b不能等于0,所以得到c+g>10,
到目前,我們已經推斷出來的是:e=1,a=9,f=0,c=b+1,c+g>10,且每一個字母代表的數字都不能相同,
這樣我們可以利用列舉來列舉出還不確定值的字母可能代表的數字,然后判斷是否符合兩數相加得第三個數,
答案原始碼:
public class Year2015_Bt3 { public static void main(String[] args) { // 由于e=1,a=9,f=0已經確定,所以之后的字母應該避開這幾個數字 for (int b = 2; b < 9; b++) { int c = b+1; for (int d = 2; d < 9; d++) { //如果d等于a、b、c的任意一個數字,則進行下一次回圈 if (d==b||d==c) { continue; } for (int g = 2; g < 9; g++) { // 判斷g是否等于之前的任意一個數字 if (g==b||g==c||g==d) { continue; } if (c+g>10) { int add1 = 9000+b*100+c*10+d; //求出第一個加數 int add2 = 1000+g*10+b; //求出第二個加數 for (int i = 2; i < 9; i++) { // 判斷i是否等于之前的任意一個數字 if (i==b||i==c||i==d||i==g) { continue; } int addAns = 10000+c*100+b*10+i; //求出兩數的和 // 判斷兩數相加得到的結果是否等于和 if (add1+add2==addAns) { System.out.println("10" + g + b); } } } } } } } }
輸出樣例:
其中有不足或者改進的地方,還希望小伙伴留言提出,一起學習!
感興趣的小伙伴可以關注專欄!
灰小猿陪你一起進步!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/267367.html
標籤:java
上一篇:反射機制



