凑算式
B DEF
A + --- + ------- = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
思路:用DFS去枚举所有情况,如果满足情况,则记录下来.
当然,也有人用全排列来解决.
DFS代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=0;
bool vis[10];
int a[10];
int ans=0;
void DFS(int x)//搜索第x个数字
{
if(x==9)
{
double sum=a[0]+1.0*a[1]/a[2]+1.0*(a[3]*100+a[4]*10+a[5])/(a[6]*100+a[7]*10+a[8]);
if(a[0]+1.0*a[1]/a[2]+(100.0*a[3]+10*a[4]+a[5])/(100.0*a[6]+10*a[7]+a[8])==10)
{
ans+=1;
cout<<ans<<":\t";
cout<<a[0]<<"+"<<a[1]<<"/"<<a[2]<<"+";
cout<<a[3]<<a[4]<<a[5]<<"/"<<a[6]<<a[7]<<a[8]<<endl;
}
return;
}
for(int i=1;i<10;i++)
{
if(!vis[i])
{
a[x]=i;
vis[i]=true;
DFS(x+1);
vis[i]=false;
}
}
}
int main()
{
memset(vis,false,sizeof(vis));
DFS(0);
cout<<ans<<endl;
return 0;
}
运行结果:
1: 3+5/1+972/486
2: 4+9/3+528/176
3: 5+3/1+972/486
4: 5+4/3+726/198
5: 5+4/9+738/162
6: 5+8/6+473/129
7: 6+4/2+358/179
8: 6+4/2+718/359
9: 6+7/3+485/291
10: 6+8/3+952/714
11: 6+9/8+437/152
12: 7+1/4+968/352
13: 7+3/2+819/546
14: 7+3/2+981/654
15: 7+5/3+264/198
16: 7+5/3+912/684
17: 7+9/6+381/254
18: 7+9/6+813/542
19: 8+1/3+465/279
20: 8+6/9+712/534
21: 8+7/6+195/234
22: 9+1/3+452/678
23: 9+1/3+524/786
24: 9+2/4+178/356
25: 9+2/4+358/716
26: 9+3/4+157/628
27: 9+4/8+176/352
28: 9+4/8+356/712
29: 9+6/8+143/572
29
全排列方法代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
double a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int ans = 0;
do
{
if( a[0] + a[1]/a[2] + (a[3]*100+a[4]*10+a[5])/(a[6]*100+a[7]*10+a[8]) == 10.0)
ans++;
}while( next_permutation(a, a+9));
printf("%d\n", ans);
return 0;
}