分子為1 的分數稱為埃及分數,現輸入乙個真分數,請將該分數分解為埃及分數。
如:8/11=1/2+1/5+1/55+1/110。
*問題分析與演算法設計
若真分數的分子a能整除分母b,則真分數經過化簡就可以得到埃及分數,若真分數的分子不能整除分母,則可以從原來的分數中分解出乙個分母為b/a+1的埃及分數。用這種方法將剩餘部分反覆分解,最後可得到結果。
*程式說明與注釋
/*安安注:對源程式作稍許修改,主要是新增了乙個外迴圈,可以直接計算多個真分數的埃及分數,按ctrl-c退出。具體的演算法我沒有認真看,有問題請提出,謝謝*/
#include
int main(void)
/*否則,輸出化簡後的真分數(埃及分數)*/
if(a==1)
else
printf("1/%ld + ",c);
a=a*c-b; /*求出餘數的分子*/
b=b*c; /*求出餘數的分母*/
if(a==3) /*若餘數為3,輸出最後兩個埃及分數*/}}
return 0;
}*執行結果
please enter a optional fraction (a/b): 1/6
it can be decomposed to: 1/6
please enter a optional fraction (a/b): 20/33
it can be decomposed to: 1/2+1/10+1/165
please enter a optional fraction (a/b): 10/89
it can be decomposed to: 1/9+1/801
please enter a optional fraction (a/b): 19/99
it can be decomposed to: 1/6+1/40+1/3960
please enter a optional fraction (a/b): 8/87
it can be decomposed to: 1/11+1/957
……(按ctrl-c退出)
華為OJ(將真分數分解為埃及分數)
題目 將真分數分解為埃及分數 描述分子為1的分數稱為埃及分數。現輸入乙個真分數 分子比分母小的分數,叫做真分數 請將該分數分解為埃及分數。如 8 11 1 2 1 5 1 55 1 110。介面說明 功能 將分數分解為埃及分數序列 輸入引數 string pcrealfraction 真分數 格式 ...
真分數轉埃及分數的和 貪心
分子為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...
將整數分解為連續正整數之和
將乙個整數 n 分解為連續正整數之和,如 15 可以分解為 15 1 2 3 4 5 15 4 5 6 15 7 8 計算從 i 開始連續 k 個數之和 sum k 2 i k 1 2 當 sum n 時,有 k k 2 i 1 k 2 n 0 變形為 i 2 n k k 1 2。在 2,2 n k...