蓝桥杯三羊献瑞题目

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

  



原文地址:https://www.cnblogs.com/zzlback/p/8491049.html