马虎的算式 有一次,老师出的题目是:36 x 495 = ?他却给抄成了:396 x 45 = ? 但结果却很戏剧性,他的答案竟然是对的!!

来源:互联网 发布:国家旅游局2015年数据 编辑:程序博客网 时间:2024/04/29 14:48
/*马虎的算式    小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。    有一次,老师出的题目是:36 x 495 = ?    他却给抄成了:396 x 45 = ?    但结果却很戏剧性,他的答案竟然是对的!!    因为 36 * 495 = 396 * 45 = 17820    类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54    假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)    能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。答案直接通过浏览器提交。注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。 */import java.util.ArrayList;import java.util.List;public class 马虎的算式 {static int count = 0;public static void check(List<Integer> lis){int a = lis.get(0);int b = lis.get(1);int c = lis.get(2);int d = lis.get(3);int e = lis.get(4);//ab * cde = adb * ceint l = (a*10+b) *(c*100+d*10+e);int r = (a*100+d*10+b)*(c*10+e);if(l==r){count++;}}// 在1~9里  的5个数全排列public static void f(List<Integer> lis,int n){if(n<=0){check(lis);return ;}for(int i=1;i<=9;i++){if(!lis.contains(i)){lis.set(lis.size()-n,i);}else{continue;}f(lis,n-1);lis.set(lis.size()-n,0);}}public static void main(String[] args) {int n = 5;List<Integer> lis = new ArrayList<Integer>();for(int i=0;i<n;i++){lis.add(0);// 初始化为全0}f(lis,n);// 在1~9里  的5个数全排列System.out.println(count);}}
运行结果:
142


原创粉丝点击