埃及同中国一样,也是世界文明古国之一。古埃及人只用分子为1的分数,在表示一个真分数时,将其分解为若干个埃及分数之和,例如:7/8表示为1/2+1/3+1/24。设计程序把一个真分数表示为最少的埃及分数之和的形式
这涉及到了贪心的思想,即,每一项都是减去前一项后,留下分子是1的最大真分数就可以了,所以如何找到真分数包含的最大埃及分数,就是解决问题的关键了。
设真分数为A/B,B除以A的整数部分为C,余数为D,则有下式成立:
B=AC+D
即
B/A=C+D/A<C+1(因为D/A是小于1的,因此呢,C+D/A <C+1且,C+1是大于B/A的最小分数。
则讲分式倒置则有:
A/B>1/(C+1)
1/(C+1)即为真分数A/B包含的最大埃及分数。设E=C+1,由于
A/B-1/E=(AE-B)/(BE) (通分
则真分数减去最大埃及分数后,得到真分数(AE-B)/(BE),该真分数可能存在公因子,需要化简,可以将分子和分母同时除以最大公约数。
具体实现代码:
#include<stdio.h> //使用库函数printf和scanf
void EgyptFraction(int A,int B); //函数声明,表示埃及分数
int CommonFactor(int m,int n); //函数声明,求最大公约数
//空行,以下是主函数