蓝桥杯-三羊献瑞

观察下面的加法算式:

  祥 瑞 生 辉

+ 三 羊 献 瑞

三 羊 生 瑞 气

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

采用回溯法:
代码如下


public class Main1 {
    public static void main(String[] args) {
        int n = 8;
        visited = new boolean[10];
        data = new int[10];
        dfs(n, 0);
    }
        /*
         *      祥   瑞   生   辉
         *      三   羊   献   瑞
         * -------------------
         * 三    羊   生   瑞   气
         */
    static boolean[] visited;
    static int[] data;
    private static boolean check(int[] data) {
        if(data[0]!=0 && data[4]!=0){   //因为祥和三是开头,因此数值不能为0
        int sum1=data[0]*1000+data[1]*100+data[2]*10+data[3];
        int sum2=data[4]*1000+data[5]*100+data[6]*10+data[1];
        int sum3=data[4]*10000+data[5]*1000+data[2]*100+data[1]*10+data[7];
        if(sum1+sum2==sum3){
            return true;
        }
        }
        return false;
    }

    public static void dfs(int n, int k) {
        if(n==k && check(data)){

            System.out.println(data[4]+""+data[5]+""+data[6]+""+data[1]);
        }


//          for(int i:data){
//              System.out.print(i);
//          }
//          System.out.println();

        for(int x=0;x<=9;x++){
            if(!visited[x]){
                visited[x]=true;
                data[k]=x;

                dfs(n,k+1);

                visited[x]=false;

            }
        }
    }
}


结果:
10652

你可能感兴趣的:(做过的蓝桥杯题目,蓝桥杯-java,三羊献瑞)