原创
凑算式
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