一.题目描述
B DEF
A + --- + ------- = 10
C GHI
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
二.思路分析
全排列方法调用,将算式拆开计算,再合并算出是否相加为10
三.代码
public class test1{
static int count = 0;
public static void main(String[] args){
int []arr = {1,2,3,4,5,6,7,8,9};
f(arr,0,arr.length-1);//方法调用
System.out.println(count);
}
public static void f(int []arr,int start,int end){
if(start==end){
//注意:double型做除法时,一定要注意除数或者被除数一定要至少有一个为double型!!!(小数点后两位)
double j = arr[0];//相当于: A
double k = arr[1]*1.00/arr[2];// 相当于: B/C
double l = (arr[3]*100.00+arr[4]*10.00+arr[5]*1.00)/(arr[6]*100+arr[7]*10+arr[8]);//相当于: DEF/GHI
if(j+k+l==10){//如果相加为10
count++;
}
}
//全排列递归调用
for(int i =start;i<arr.length;i++){//【注意】:i从start开始,否则会报错。。。
int t = arr[i];
arr[i]=arr[start];
arr[start]=t;
f(arr,start+1,end);
t = arr[i];
arr[i]=arr[start];
arr[start]=t;
}
}
}
四.知识点
1.全排列与2017年第二题类似,相关知识点可查看2017第二题
2.double型做除法时,一定要注意除数或者被除数一定要至少有一个为double型!!!(小数点后2位)