1. 程式人生 > >藍橋杯三羊獻瑞題目

藍橋杯三羊獻瑞題目

new eof 開始 arr 不同 i++ ray bool 觀察

今天開始做了做藍橋杯的題目,題目是三羊獻瑞,這道題目開始做,一點思路都沒有,但是硬著頭皮寫下去,用循環暴力求,java都運行了好久,好幾10秒,所以在藍橋杯上估計是超時了。運行出了幾個答案,再進行,排除,終於找到了唯一的一個答案。首先,我們來看一下題目。

1.題目描述

  
三羊獻瑞

觀察下面的加法算式:

祥 瑞 生 輝
+ 三 羊 獻 瑞
-------------------
三 羊 生 瑞 氣

(如果有對齊問題,可以參看【圖1.jpg】)

其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字。

請你填寫“三羊獻瑞”所代表的4位數字(答案唯一),不要填寫任何多余內容。

2.輸入:

3.輸出

1085

4.算法思想:

三 a
羊 b
生 c
瑞 d
氣 e
祥 f
輝 g
獻 h
  fdcg
+ abhd
-----
abcde

得到這樣的算式,然後,用暴力循環

5.代碼示例:
/*
add1 = 9567, add2 = 1085, add3 = 10652
*/
public class Test05 {
public static void main(String[] args) {
int add1 = 0;
int add2 = 0;
for(add1=9200;add1<9800;add1++){
for(add2=1000;add2<1300;add2++){
int[] f1 = f(add1);
int[] f2 = f(add2);
int[] f3 = f(add1+add2);
if(!isReapead(add1) && !isReapead(add2) && !isReapead(add1+add2) && f1[1]==f2[3] && f3[0]==f2[0] && f3[1]==f2[1] && f3[2]==f1[2] && f3[3]==f2[3]){
System.out.println("add1 = " + add1 + ", add2 = " + add2 + ", add3 = " + (add1+add2));
}
}
}
}

private static boolean isReapead(int shu) {
int[] f = f(shu);
int flag = 0;
for(int i=0;i<f.length-1;i++){
for(int j=i+1;j<f.length;j++){
if(f[j]==f[i]){
flag = 1;
}
}
}
if(flag ==1){
return true;
}else{
return false;
}
}

private static int[] f(int shu) {
String valueOf = String.valueOf(shu);
char[] charArray = valueOf.toCharArray();
int temp[] = new int[charArray.length];
for(int i=0;i<temp.length;i++){
temp[i] = charArray[i] - ‘0‘;
}
return temp;
}
}

藍橋杯三羊獻瑞題目