把乙個真分數表示為埃及分數之和的形式。所謂埃及分數,是指分子為1的分數。如7/8 = 1/2 + 1/3 + 1/24。
乙個真分數a/b,要尋找其最大的1/c,那麼很容易想到的方法是列舉。但是列舉法效率不高,所以這裡採用貪心演算法。
a/b肯定為<1的數字,那麼 c = b / a 既可以理解為b比a大多少倍,那麼顯然餘數不為0 時c = b / a + 1。這樣很容易找到最大的分數的分母。
設某個真分數的分子為a(!=1),分母為b。
把b除以a的商的整數部分加1後的值作為埃及分數的分母 c。
輸出 1/c。
將a乘以c減去b作為新的a。
將b乘以c作為新的b
如果a大於1且能整除b,則最後乙個埃及分數的分母為b/a.
如果a=1,則最後乙個分母為b;否則跳轉到2步驟
#include
int main()
printf("%d/%d=",a,b);
//分子為1或者分數可以約分
if (a == 1 || b % a == 0)
while (a != 1)
if (b%a == 0 || a == 1)
}return
0;}
貪心法 埃及分數
古代埃及人在進行分數運算時。只使用分子是1的分數。因此這種分數也叫做埃及分數,或者叫單分子分數。例如 7 8 1 2 1 3 1 24 乙個真分數的埃及分數表示並不唯一 7 8也可以有如下表示 7 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 貪心法,則是要讓乙個真分數被埃及分...
真分數轉埃及分數的和 貪心
分子為1的分數稱為埃及分數。現輸入乙個真分數 分子比分母小的分數,叫做真分數 請將該分數分解為埃及分數。例如6 7 1 2 1 3 1 42 題目分析 設原分數為a b,b除a得到c,c 1作為第乙個分母,拿a b 1 c的值做第二個待分解的數直到a 1或者b a 0 include include...
埃及分數式
金字塔的故鄉埃及也是數學的發源地之一,古埃及數系中,記數常採用分子為1的分數,稱為 埃及分數 人們研究較多且頗感興趣的問題是 把給定整數或分數分解為埃及分數之和,分解與優化往往是乙個煩瑣艱辛的過程 例如對5 121,可以分解為 為了盡可能減少分解項數,1969年數學家布雷策在 數學遊覽 中給出了以下...