B DEF
A + — + -——— = 10
C GHI
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?(29种)
暴力生成9的全排列然后去验证等式是否成立,防止精度问题。
代码:
// -*- coding: utf-8 -*-
// @Date : 2016-04-06 22:54:49
// @Author : Zeroinger
#include <iostream>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;
int num[10];
int main()
{
int ans = 0;
//int k=1;
for (int i = 0; i < 10; i++)
{
num[i] = i + 1;
}
do
{
double sum = 0;
sum = num[0] + (double)num[1] / num[2] + (double)(num[3] * 100 + num[4] * 10 + num[5]) / (num[6] * 100 + num[7] * 10 + num[8]);
if (sum == 10)
{
ans++;
/*double a=(num[3] * 100 + num[4] * 10 + num[5]) ;
double b= (num[6] * 100 + num[7] * 10 + num[8]);
cout<<" Case "<<k<<": ";
k++;
cout << num[0] << " + " << num[1] << "/" << num[2] << " + " <<a<<"/"<<b<<" = "<<10<<endl;*/
}
} while (next_permutation(num, num + 9));
cout << ans << endl;
return 0;
}
Or
// -*- coding: utf-8 -*-
// @Date : 2016-04-07 16:21:00
// @Author : Zeroinger
#include <iostream>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;
int num[9];
bool v[9];
int ans=0;
void Slove()
{
double sum = 0;
int k=1;
sum = num[0] + (double)num[1] / num[2] + (double)(num[3] * 100 + num[4] * 10 + num[5]) / (num[6] * 100 + num[7] * 10 + num[8]);
if (sum == 10)
{
ans++;
double a=(num[3] * 100 + num[4] * 10 + num[5]) ;
double b= (num[6] * 100 + num[7] * 10 + num[8]);
cout<<" Case "<<k<<": ";
k++;
cout << num[0] << " + " << num[1] << "/" << num[2] << " + " <<a<<"/"<<b<<" = "<<10<<endl;
}
}
void dfs(int id)
{
if(id==9)
{
Slove();
return ;
}
for(int i=1;i<10;i++)
{
if(!v[i])
{
v[i]=true;
num[id]=i;
dfs(id+1);
v[i]=false;
}
}
}
int main()
{
memset(v,false,sizeof(v));
dfs(0);
cout<<ans<<endl;
return 0;
}