第七届蓝桥杯省赛--凑算式
一、问题描述
这个算式中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,建议遵循“能避就避”原则 。
版权声明:本文为博主原创文章,未经博主允许不得转载。鄙人小白一枚,若有错误,欢迎指正,谢谢。

浙公网安备 33010602011771号