问题描述:
奥运裁判喜欢把一个分数分解成类似:1/a + 1/b 的格式;
这里a != b 为不同的整数, 分子必须为1;
样例输出:
比如分数为2/15:
可分解为:
1:1/8 + 1/120
2:1/9 + 1/45
3:1/10 + 1/30
4:1/12 + 1/20
如果分数为2/45则有多少种结果?
问题分析:
1:使用穷举法;
2:因为要分解成两个分数所以至少有一个大于一半;即我们其中的一个分母由fm1开始向上穷举:fm1 = num / 2 +1;
3 : 有了第一个分母,则第二个分母可由减法算出fm2 = fm1 * (fm1 / (fenzi)),此部分就可省去穷举浪费的时间和内存;fenzi = 2 * fm1 - num;
4:计算时控制条件为 num * fm1 % fenzi == 0;(即分母比分子的余数为零);
代码演示:
#include <iostream>
using namespace std;
void fen_jie(int num)
{
int fm1, fm2, fenzi, code = 0;
for (fm1 = num / 2 + 1; ; ++fm1)
{
fenzi = 2 * fm1 - num;
if ( fenzi >= fm1) break;
if (num * fm1 % fenzi == 0)
{
fm2 = num * fm1 / fenzi;
cout << ++code << " : "
<< "1/" << fm1
<< " " << "1/" << fm2 << endl;
}
}
return ;
}
int main()
{
int num;
cin >> num;
fen_jie(num);
return 0;
}
45的结果为:7种;