第七届蓝桥杯省赛--凑算式

一、问题描述


    
    
  这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
  比如:
    6+8/3+952/714 就是一种解法,
    5+3/1+972/486 是另一种解法。
  这个算式一共有多少种解法?
  注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

二、题目类型:结果填空、全排列

 

三、解题思路及代码

  全排列的题目最粗暴的解法就是爆破,把A-I所有可能的数字全遍历一遍即可解出答案。但是第一次做这道题,我做错了!第一是因为审题没有审清楚!!!题目说“不同的字母代表不同的数字”!你可长点心吧。。。第二是因为没有考虑到除法结果可能是浮点数的问题。所以在考场上,请务必不能粗心大意。

 1 public class GatherFormula {
 2 
 3     public static void main(String[] args) {
 4         int count = 0;//统计符合条件的解法数
 5         for (int a = 1; a < 10; a++) {
 6             for (int b = 1; b < 10; b++) {
 7                 for (int c = 1; c < 10; c++) {
 8                     for (int d = 1; d < 10; d++) {
 9                         for (int e = 1; e < 10; e++) {
10                             for (int f = 1; f < 10; f++) {
11                                 for (int g = 1; g < 10; g++) {
12                                     for (int h = 1; h < 10; h++) {
13                                         for (int i = 1; i < 10; i++) {
14                                             if (a != b && a != c && a != d && a != e && a != f && a != g && a != h
15                                                     && a != i && b != c && b != d && b != e && b != f && b != g
16                                                     && b != h && b != i && c != d && c != e && c != f && c != g
17                                                     && c != h && c != i && d != e && d != f && d != g && d != h
18                                                     && d != i && e != f && e != g && e != h && e != i && f != g
19                                                     && f != h && f != i && g != h && g != i && h != i) {
20                                                 if ((a + b * 1.0 / c + (d * 100 + e * 10 + f) * 1.0 / (g * 100 + h * 10 + i)) == 10)
21                                                     count++;
22                                             }
23                                         }
24                                     }
25                                 }
26                             }
27                         }
28                     }
29                 }
30             }
31         }
32         System.out.println(count);
33     }
34 }

  答案:29

 

四、反思与总结

  1、认真审题!!!!!!

  2、题目中如果涉及到浮点数的比较还请留点心,整数/整数 的结果还是整数,如果是除不尽的情况就会发生计算结果不精确的情况,从而导致解题错误!所以可以将被除数*1.0 转化为浮点数,那么计算结果的类型也就是浮点数。但有的时候也可以避开浮点数的运算,比如,可以将这题的算式处理为:ACGHI + BGHI + DEFC = 10*CGHI,建议遵循“能避就避”原则 。

posted @ 2019-03-17 11:20  Aion_14  阅读(258)  评论(0)    收藏  举报