第七届蓝桥杯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 }

注释

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

原文地址:https://www.cnblogs.com/loveluking/p/6369106.html