凑算式
B DEF
A + — + ——- = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个题比较坑,开始我用了一个多重循环。结果等了好久结果都没出来,泪。。。
后面看了网上的代码,感觉人家用一个递归就解决了,其中为了避免数被重复使用,用了一个数组,这算法不错,的学着点了,崇拜!
之后试着做,结果总是出不来,原来在fun函数里定义的sum是int型,搞得精度问题把数都变得很大了,哎,菜的扣脚。。。之后结果终于出来了。
结果是29;
下面是我的代码:
#include<iostream>
using namespace std;
int a[10];
bool visit[10];
int ans=0;
void fun()
{
double sum=(double)a[0]+(double)a[1]/a[2]+(double)(a[3]*100+10*a[4]+a[5])/(a[6]*100+a[7]*10+a[8]);
if(sum==10)ans++;
}
void dfs(int index)
{
if(index==9)
{
fun();
return ;
}
for(int i=1;i<10;i++)
{
if(!visit[i])
{
visit[i]=true;
a[index]=i;
dfs(index+1);
visit[i]=false;
}
}
}
int main()
{
dfs(0);
cout<<ans<<endl;
return 0;
}