貪心法 埃及分數

2021-10-25 07:39:14 字數 1105 閱讀 3481

古代埃及人在進行分數運算時。只使用分子是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

貪心法,則是要讓乙個真分數被埃及分數表示的個數最少,每次選擇不大於真分數的最大埃及分數

設a為分子,b為分母,c為a/b,d為a%b

b=a*c+d——》b/a=c+d/a,因為d是餘數所以d一定小於a,則d/a<1

所以b/a從而得到a/b>1/(c+1),這裡的1/(c+1)就是可以選擇的最大埃及分數

輸入:真分數的分子a和分母b

輸出:最少個數的埃及分數相加

e=b/a+1 (這裡的b/a代表上述內容的c)

輸出1/e

a=a×e-b,b=b×e

求a,b的最大公約數temp,若temp大於1則a=a/temp,b=b/temp

若temp=1,輸出1/b,演算法結束,否則重複轉去執行步驟1

#include

using

namespace std;

void

egyptfraction

(int a,

int b)

;int

commfactor

(int a,

int b)

;//求最大公約數

intmain()

void

egyptfraction

(int a,

int b)

}while

(a!=1)

; cout<<

1<<

"/"<}int

commfactor

(int a,

int b)

int r;

dowhile

(r!=0)

;return a;

}

貪心 埃及分數

把乙個真分數表示為埃及分數之和的形式。所謂埃及分數,是指分子為1的分數。如7 8 1 2 1 3 1 24。乙個真分數a b,要尋找其最大的1 c,那麼很容易想到的方法是列舉。但是列舉法效率不高,所以這裡採用貪心演算法。a b肯定為 1的數字,那麼 c b a 既可以理解為b比a大多少倍,那麼顯然餘...

真分數轉埃及分數的和 貪心

分子為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年數學家布雷策在 數學遊覽 中給出了以下...