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