原创
凑算式
B DEF
A + --- + ------- = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
法一(枚举):
开辟9个变量分别代表1~9个数,每个变量在1~9中变化,对于每一个数字都判断是否包含1~9个数码和满足凑算式即可。
public class 凑算式 { public static void main(String args[]) { double arr[]=new double[9]; long total=0L; for(arr[0]=1;arr[0]<=9;arr[0]++) { for(arr[1]=1;arr[1]<=9;arr[1]++) { for(arr[2]=1;arr[2]<=9;arr[2]++) { for(arr[3]=1;arr[3]<=9;arr[3]++) { for(arr[4]=1;arr[4]<=9;arr[4]++) { for(arr[5]=1;arr[5]<=9;arr[5]++) { for(arr[6]=1;arr[6]<=9;arr[6]++) { for(arr[7]=1;arr[7]<=9;arr[7]++) { for(arr[8]=1;arr[8]<=9;arr[8]++) { int i=0; int tt=0; int flag[]=new int[10]; for(i=0;i<=8;i++) { //判断是否包含0~9 if(flag[(int)(arr[i])]==1) { break; } flag[(int)(arr[i])]=1; tt++; } if(tt==9) { if(arr[0]+arr[1]/arr[2]+(arr[3]*100+arr[4]*10+arr[5])/(arr[6]*100+arr[7]*10+arr[8])==10) { total++; } } } } } } } } } } } System.out.println(total); } }
法二(全排列):
全排列的思想请看我另外一篇博客:https://www.cnblogs.com/chiweiming/p/8727164.html
每产生一种全排列,就判断是否满足凑算式即可。
public class 凑算式{ static int total=0; static int arr[]=new int[9]; static void Swap(int a,int b) { //交换 int temp=0; temp=arr[a]; arr[a]=arr[b]; arr[b]=temp; } static void Full_Sort(int num) { //全排列 if(num==9) { //产生一种全排列 double a=arr[0]; double b=arr[1]; double c=arr[2]; double def=arr[3]*100+arr[4]*10+arr[5]; double ghi=arr[6]*100+arr[7]*10+arr[8]; if(a+b/c+def/ghi==10) { total++; } return; } int i=0; for(i=num;i<=8;i++) { Swap(num,i); Full_Sort(num+1); Swap(num,i); } } public static void main(String args[]) { int i=0; for(i=0;i<=8;i++) { arr[i]=i+1; } Full_Sort(0); System.out.println(total); } }
答案:29
21:10:02
2018-06-07