• 第七届蓝桥杯javaB组真题解析-凑算式(第三题)


    题目

    /*
    凑算式
    
         B      DEF
    A + --- + ------- = 10
         C      GHI
         
    (如果显示有问题,可以参见【图1.jpg】)
         
         
    这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
    
    比如:
    6+8/3+952/714 就是一种解法,
    5+3/1+972/486 是另一种解法。
    
    这个算式一共有多少种解法?
    
    注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
    */

    图1

    答案

    29

    代码

     1 public class Main {
     2     public static void main(String[] args) {
     3         //实现 元素都不相同的全排列 简单的方法可以用暴力破解的方法 只要把循环中有重复数字的结果剔除就可以
     4         int a, b, c, d, e, f, g, h, i, s=0;
     5         for(a=1;a<10;a++){
     6         for(b=1;b<10;b++){
     7         if(b==a) continue;
     8         for(c=1;c<10;c++){
     9         if(c==a||c==b) continue;
    10         for(d=1;d<10;d++){
    11         if(d==a||d==b||d==c) continue;
    12         for(e=1;e<10;e++) {
    13         if(e==a||e==b||e==c||e==d) continue;
    14         for(f=1;f<10;f++){
    15         if(f==a||f==b||f==c||f==d||f==e) continue;
    16         for(g=1;g<10;g++){
    17         if(g==a||g==b||g==c||g==d||g==e||g==f) continue;
    18         for(h=1;h<10;h++){
    19         if(h==a||h==b||h==c||h==d||h==e||h==f||h==g) continue;
    20         for(i=1;i<10;i++){
    21             if(i==a||i==b||i==c||i==d||i==e||i==f||i==g||i==h) continue;
    22             //其中要注意的是,两个整数相除得到的还是整数,所以要把其中一个整数先乘以 1.0 转化成浮点数 (建议乘在分子上,因为计算顺序不容易出错)
    23             double num = a + b*1.0/c + (100*d+10*e+f)*1.0/(100*g+10*h+i)-10;
    24             if(num==0) {
    25                 s++; 
    26                 //下面会显示结果项 
    27                 /*System.out.println("     "+b+"      "+d+""+e+""+f+"");
    28                 System.out.println(""+a+" + --- + ------- = 10");
    29                 System.out.println("     "+c+"      "+g+""+h+""+i+"");
    30                 System.out.println(a+"   "+b*1.0/c+"     "+(100*d+10*e+f)*1.0/(100*g+10*h+i));
    31                 System.out.println();
    32                 System.out.println();*/
    33             }
    34         }
    35         }
    36         }
    37         }
    38         }
    39         }
    40         }
    41         }
    42         }
    43         System.out.println(s);
    44     }
    45 }

    注释

    就本题目而言用暴力破解会更省事一点,其中要注意的一个小问题就是,整数相除得整数,要细心一点。由本题目牵扯到的全排列方面的算法我会再写一篇博客

  • 相关阅读:
    sql server中的左连接与右连接的简便写法
    SQL中CONVERT()转化函数的用法 字符串转日期
    Asp.net MVC 中Controller返回值类型ActionResult
    一探前端开发中的JS调试技巧
    String trim 坑 对于ascii码为160的去不掉
    SQL小练习
    Java运行时异常和非运行时异常
    java 子类不能继承父类的static方法
    Java中的类加载器
    搞懂head 和 tail 命令
  • 原文地址:https://www.cnblogs.com/loveluking/p/6369106.html
Copyright © 2020-2023  润新知