今天开始做了做蓝桥杯的题目,题目是三羊献瑞,这道题目开始做,一点思路都没有,但是硬着头皮写下去,用循环暴力求,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; } }