//第四届蓝桥杯软件类国赛真题-C-A-3_埃及分数.cpp
/*
【题目】
标题:埃及分数
古埃及曾经创造出灿烂的人类文明,他们的分数表示却很令人不解。
古埃及喜欢把一个分数分解为类似: 1/a + 1/b 的格式。
这里,a 和 b 必须是不同的两个整数,分子必须为 1
比如,2/15 一共有 4 种不同的分解法(姑且称为埃及分解法):
1/8 + 1/120
1/9 + 1/45
1/10 + 1/30
1/12 + 1/20
那么, 2/45 一共有多少个不同的埃及分解呢(满足加法交换律的算同种分解)?
请直接提交该整数(千万不要提交详细的分解式!)。
请严格按照要求,通过浏览器提交答案。
注意:只提交分解的种类数,不要写其它附加内容,比如:说明性的文字
*/
/*【解题思路】
解法:将 1/a + 1/b == 2/45 这一表达式分子分母通分转化为 2ab == 45(a+b) ,
从而避免除法运算浮点数运算的溢出等不精确原因。然后暴力枚举a、b的值。
且题中没给a、b值的最大值范围,故可以多次尝试不同的最大值来验证答案是否正确
答案:
7
*/
#include<iostream>
using namespace std;
#define MAX 20000
int main()
{
int a,b;
int count = 0;
for(a = 1;a < MAX;a++)
for(b = 1;b < MAX;b++){
if(a != b &&2*a*b == 45*(a+b)){
cout<<"1/"<<a<<" + "<<"1/"<<b<<endl;
count++;
}
}
//因为题目提示满足加法交换律的算同种分解,故需除以2
//或者直接在暴力枚举中直接加条件 a<b ,这样就不用除以2了
cout<<"分解的种类数共有"<<count/2<<"种"<<endl;
return 0;
}