zoukankan      html  css  js  c++  java
  • 关于暴力破解空缺算式结果的方法以及细节注意

    三羊献瑞

    观察下面的加法算式:
          祥 瑞 生 辉
      +   三 羊 献 瑞
    -------------------
       三 羊 生 瑞 气
    (如果有对齐问题,可以参看【图1.jpg】)
    其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
    请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
    使用枚举法暴力破解
    代码如下所示:
    public class nine {
    public static void main(String[] args){
        for(int a=1;a<10;a++){   //a祥
            for(int b=0;b<10;b++){  //b瑞
                if(b!=a){
                    for(int c=0;c<10;c++){  //c生
                        if(c!=a&&c!=b){
                            for(int d=0;d<10;d++){  //d辉
                                if(d!=a&&d!=b&&d!=c){
                                    int x=1000*a+100*b+10*c+d;
                                    for(int e=1;e<10;e++){  //e三
                                        if(e!=a&&e!=b&&e!=c&&e!=d){
                                            for(int f=0;f<10;f++){  //f羊
                                                if(f!=a&&f!=b&&f!=c&&f!=d&&f!=e){
                                                    for(int g=0;g<10;g++){  //g献
                                                        if(g!=a&&g!=b&&g!=c&&g!=d&&g!=e&&g!=f){
                                                            int y=1000*e+100*f+10*g+b;
                                                            for(int h=0;h<10;h++){  //h气
                                                                if(h!=a&&h!=b&&h!=c&&h!=d&&h!=e&&h!=f&&h!=g){
                                                                    int z=10000*e+1000*f+100*c+10*b+h;
                                                                    if(x+y==z){
                                                                        System.out.println(1000*e+100*f+10*g+b);
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        
    }
    }

    运行结果为:

    1085

    这道题由于没有设计到除法,所以解法很简单,直接for循环嵌套即可

    凑算式

         B      DEF
    A + --- + ------- = 10
         C      GHI
        
    (如果显示有问题,可以参见【图1.jpg】)
     
     
    这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

    比如:
    6+8/3+952/714 就是一种解法,
    5+3/1+972/486 是另一种解法。

    这个算式一共有多少种解法?

    注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

    这里需要注意的是java中的除法(所有语言的除法)有取整的效果;eg: 5/2=2 而不是2.5

    所以在解决这一类有除法的算式时,需要将式子全部通分,成为只有乘法运算的式子即可

    代码如下:

    public class ten {
        public static int count = 0;
        public static void main(String[] args){
    
        for(int a=1;a<10;a++){
            for(int b=1;b<10;b++){
                if(b!=a){
                    for(int c=1;c<10;c++){
                        if(c!=a&&c!=b){
                           for(int d=1;d<10;d++){
                                if(d!=a&&d!=b&&d!=c){
                                    for(int e=1;e<10;e++){
                                        if(e!=a&&e!=b&&e!=c&&e!=d){
                                            for(int f=1;f<10;f++){
                                                if(f!=a&&f!=b&&f!=c&&f!=d&&f!=e){
                                                    for(int g=1;g<10;g++){
                                                        if(g!=a&&g!=b&&g!=c&&g!=d&&g!=e&&g!=f){
                                                            for(int h=1;h<10;h++){
                                                                if(h!=a&&h!=b&&h!=c&&h!=d&&h!=e&&h!=f&&h!=g){
                                                                    for(int i=1;i<10;i++){
                                                                        if(i!=a&&i!=b&&i!=c&&i!=d&&i!=e&&i!=f&&i!=g&&i!=h){
                                                                            int m=(d*100+e*10+f);;
                                                                            int n=g*100+h*10+i;
                                                                            if((b*n+c*m)==(10-a)*(c*n)){
                                                                                count++;
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        System.out.println(count+" ");
        }
    }

    运行结果如下:

    29

  • 相关阅读:
    Java实现 LeetCode 767 重构字符串(ASCII的转换)
    Java实现 LeetCode 767 重构字符串(ASCII的转换)
    Java实现 LeetCode 767 重构字符串(ASCII的转换)
    Java实现 LeetCode 766 托普利茨矩阵(暴力)
    Java实现 LeetCode 766 托普利茨矩阵(暴力)
    Java实现 LeetCode 766 托普利茨矩阵(暴力)
    Java实现 LeetCode 765 情侣牵手(并查集 || 暴力)
    219. Contains Duplicate II
    217. Contains Duplicate
    135. Candy
  • 原文地址:https://www.cnblogs.com/liushuncheng/p/6523114.html
Copyright © 2011-2022 走看看