凑算式
B DEF
A + --- + ------- = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
分析:
和寒假作业那道题一样,填空题直接dfs递归就好了,主要注意除法的精度问题,答案是29。
代码在此:
#include<stdio.h>
#include<string.h>
#define SIZE 9 + 10
int v[SIZE];
int n = 9;
double data[SIZE];
int tot = 0;
void dfs (int k) {
if(k >= n){
if(data[0]*1.0 + data[1]*1.0/data[2] + (data[3]*100+data[4]*10+data[5])*1.0/(data[6]*100+data[7]*10+data[8]) == 10.0)
// if(data[0]*data[2]*data[6]*data[7]*data[8] + data[1]*data[6]*data[7]*data[8] + data[3]*data[4]*data[5]*data[2] == 10.0*data[2]*data[6]*data[7]*data[8])
tot ++;
return ;
}
int i;
for(i = 1; i <= 9; i ++){
if(v[i] == 0){
v[i] = 1;
data[k] = i;
dfs(k+1);
v[i] = 0;
}
}
}
int main () {
memset(v, 0, sizeof(v));
dfs(0);
printf("%d", tot);
return 0;
}