2016第三题
凑算式
B DEF
A + — + -——— = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
分析:这个题很简单,就是爆搜即可,但是要注意精度问题,太坑了!!
我先贴上一段测试的代码:
public class test {
public static void main(String[] args) {
int c = 6;
double a = 8*1.0/3;
double b =952*1.0/714;
System.out.println(a+" + "+b+" = "+(a+b));
double sum = c+a+b;
System.out.println(sum);
if(sum==10)
System.out.println("yes");
else
System.out.println("no");
}
}
自己运行一下就可以发现:两个浮点类型相加的结果的形式。那么这个题判断的时候也要注意了,看代码:
public class Main {
static Scanner in = new Scanner(System.in);
static int[] a = new int[10];
static boolean[] vis = new boolean[10];
static int ans = 0;
static void dfs(int sp) {
if(sp==9) {
int c = a[3]*100+a[4]*10+a[5];
int d = a[6]*100+a[7]*10+a[8];
double t1 = a[1]*1.0/a[2];//注意这里
double t2 = c*1.0/d;
if(a[0]+t1+t2==10)
ans++;
return;
}
for(int i = 1;i <= 9;i++) {
if(!vis[i]) {
vis[i] = true;
a[sp] = i;
dfs(sp+1);
vis[i] = false;
}
}
}
public static void main(String args[]){
Arrays.fill(vis, false);
dfs(0);
System.out.println(ans);
}
}
以后一定要注意了,不然很容易出错。。。