填算式 ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字。 这个算式有多少种可能的正确填写方法?
2013-04-10 10:46
531 查看
/* * 看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字。 这个算式有多少种可能的正确填写方法? 173 + 286 = 459 295 + 173 = 468 173 + 295 = 468 183 + 492 = 675 以上都是正确的填写法! 注意: 111 + 222 = 333 是错误的填写法! 因为每个数字必须是不同的! 也就是说:1~9中的所有数字,每个必须出现且仅出现一次! 注意: 不包括数字“0”! 注意: 满足加法交换率的式子算两种不同的答案。 所以答案肯定是个偶数! 注意: 只要求计算不同的填法的数目 不要求列出所有填写法 更不要求填写源代码! 答案不要写在这里,请写在“解答.txt”中! */ import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class T01 { static List<int[]> lis = new ArrayList<int[]>(); // 输出所有组合 public static void print(){ for(int[] x:lis){ for(int y:x){ System.out.print(y); } System.out.println(); } } // 检测是否有重复元素 public static boolean check2(int[] n){ if(lis.size()==0) return false; for(int i=0;i<lis.size();i++){ int a = n[0]*100+n[1]*10+n[2]; int b = lis.get(i)[3]*100+lis.get(i)[4]*10+lis.get(i)[5]; if(a!=b){ return false; } } return true; } // 检测,并添加符合的组合 public static void check(int[] n){ int a = n[0]*100+n[1]*10+n[2]; int b = n[3]*100+n[4]*10+n[5]; int c = n[6]*100+n[7]*10+n[8]; if(a+b==c){ if(!check2(n)){ // 如果不重复,则添加 lis.add(Arrays.copyOf(n, n.length)); } } } // 全排列 public static void f(int[] n,int start,int end){ if(start>=end){ check(n); // 检测,并添加符合的组合 return ; }else{ for(int i=start;i<n.length;i++){ int temp = n[start]; n[start] = n[i]; n[i] = temp; f(n,start+1,end); temp = n[start]; n[start] = n[i]; n[i] = temp; } } } public static void main(String[] args){ int[] n = {1,2,3,4,5,6,7,8,9}; f(n,0,n.length-1); print(); // 输出结果 System.out.println("总个数:"+lis.size()); // 输出个数 } }运行结果:
124659783 125739864 127359486 127368495 128439567 128367495 ......... ......... ......... ......... ......... 745218963 746235981 748215963 754182936 752184936 763182945 762183945 715248963 716238954 718245963 718236954 783162945 784152936 782154936 782163945 总个数:336
方法二:另一种方法,下列是0-9的组合,没排除0
/*填算式 * 看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字。 这个算式有多少种可能的正确填写方法? 173 + 286 = 459 295 + 173 = 468 173 + 295 = 468 183 + 492 = 675 以上都是正确的填写法! 注意: 111 + 222 = 333 是错误的填写法! 因为每个数字必须是不同的! 也就是说:1~9中的所有数字,每个必须出现且仅出现一次! 注意: 不包括数字“0”! 注意: 满足加法交换率的式子算两种不同的答案。 所以答案肯定是个偶数! 注意: 只要求计算不同的填法的数目 不要求列出所有填写法 更不要求填写源代码! 答案不要写在这里,请写在“解答.txt”中! */ public class Demo01 { static int count=0; public static void main(String[] args){ for(int i=1;i<=9;i++){ // 第一个数的百位 for(int j=0;j<=9;j++){ // 十位 for(int k=0;k<=9;k++){ // 个位 for(int l=1;l<=9;l++){ // 第二个数的百位 for(int m=0;m<=9;m++){ // 十位 for(int n=0;n<=9;n++){ // 个位 if(i!=j && i!=k && i!=l && i!=m && i!=n && j!=k && j!=l && j!=m && j!=n && k!=l && k!=m && k!=n && l!=m && l!=n && m!=n ){ int a = i*100+j*10+k; int b = l*100+m*10+n; int c = a + b; int x,y,z; if(c>99&&c<999){ x = c/100; y = c%100/10; z = c%10; }else{ break; } if(x!=y&&x!=z&&y!=z && x!=i && x!=j && x!=k && x!=l && x!=m && x!=n && y!=i && y!=j && y!=k && y!=l && y!=m && y!=n && z!=i && z!=j && z!=k && z!=l && z!=m && z!=n ){ System.out.println(a+" + "+b+" = "+c); count++; } } } } } } } } System.out.println("总个数:"+count); } }运行结果:
103 + 469 = 572 103 + 479 = 582 103 + 579 = 682 103 + 649 = 752 103 + 749 = 852 103 + 759 = 862 104 + 579 = 683 104 + 759 = 863 105 + 269 = 374 ... + ... = ... ... + ... = ... ... + ... = ... ... + ... = ... ... + ... = ... 784 + 136 = 920 784 + 152 = 936 786 + 134 = 920 805 + 137 = 942 806 + 147 = 953 807 + 135 = 942 807 + 146 = 953 835 + 107 = 942 837 + 105 = 942 846 + 107 = 953 847 + 106 = 953 总个数:1088
相关文章推荐
- 看这个算式:☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字。这个算式有多少种可能的正确填写方法?
- 看这个算式 ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字。
- 如下的加法算式:其中每个汉字代表一个数字,填写“让我怎能过大年” 所代表的整数。
- 将1~6这6个数字按每行3个进行输出,输出时要求左边的数字比右边的大,上边的数字比下边的大,求出所有可能的填写方法并统计输出排列方法有多少种。
- 小明买了一些彩色的气球用绳子串在一条线上,想要装饰房间,每个气球都染上了一种颜色,每个气球的形状都是各不相同的。我们用1到9一共9个数字表示不同的颜色,如12345则表示一串5个颜色各不相同的气球串。但小明希望得到不出现重复颜色的气球串,那么现在小明需要将这个气球串剪成多个较短的气球串,小明一共有多少种剪法?如原气球串12345的一种是剪法是剪成12和345两个气球串。
- 61. 从1到n,共有n个数字,每个数字只出现一次。从中随机拿走一个数字x,请给出最快的方法,找到这个数字。如果随机拿走k(k>=2)个数字呢?[find k missing numbers from 1 to n]
- 判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
- 问题四十六: 在下面的加法算式中,不同的符号代表不同的数字,相同的符号代表相同的数字。
- 输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数
- 二、给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指定的步长遍历地牢,要求每一步都不可以超过地牢的边界,也不能到达障碍上。地牢的出口可能在任意某个可以通行的位置上。牛牛想知道最坏情况下,他需要多少步才可以离开这个地牢。
- 输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数
- CSU 1021 从m个不同元素中取出n (n ≤ m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。组合数的计算公式如下: C(m, n) = m!/((m - n)!n!) 现在请问,如果将组合数C(m, n)写成二进制数,请问转这个二进制数末尾有多少个零。
- 排列平方数 若干不同的数字,排列组合后能产生多少个平方数? 下面的代码解决了这个问题。
- EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不保证 DbContext 的实例成员和相关类是线程安全的。 临时解决了这个问题,在Context的构造函数中,禁用了自动初始化:
- win7程序关闭后弹出 程序兼容性助手 这个程序可能安装不正确 如果此程序没有正确安装,处理方式
- EF 查询表数据,如果查询外键表,且这个外键有可能为空,但主表资料也就查不出来的解决方法
- win7程序关闭后弹出 程序兼容性助手 这个程序可能安装不正确 如果此程序没有正确安装,处理方式
- 如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗? 显然,这个值是介于2和3之间的一个数字。 请把x的值计算到小数后6位(四舍五入),并填写这个小数值。 注意:只填写一
- 牛牛和15朋友来玩打土豪分田地的游戏,牛牛决定让你来分田地,地主的田地可以看成是一个矩形,每个位置有一个价值。分割田地的方法是横竖各切三刀,分成26份,作为领导干部,牛牛总是会选择其中总价值最小的一份田地,作为牛牛最好的朋友,你希望牛牛取得的田地价值和尽可能大,你知道这个值最大可以是多少吗? 输入两个整数n和m(1≤n,m≤75)表示田地的大小,接下来n行,每行包括m个0-9之间的数字,表示每块
- mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?