贪心算法之埃及分数问题
生活随笔
收集整理的這篇文章主要介紹了
贪心算法之埃及分数问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.問題:給定一個分數,如7/8,我們可以把它表示為1/2 + 1/3 +1/24,埃及分數問題即把一個真分數表示為最少的埃及分數之和的形式,輸入一個真分數把其分解為埃及分數之和。
2.設計思路:設分數為a/b,則c=b/a,d=b%a,有b=a*c+d通過遞推數學公式可以知道,給定分數的最大埃及分數的分母為e=c+1=b/a+1;循環的出口為分子a=1;需要把真分數拆開計算,a=a*c-b,b=b*c;如果a=3而且b%2=0時,可以直接拆成兩個埃及分數之和1/(b/2)+1/b,再結束;
3.代碼:
/*埃及分數問題*/ #include <stdio.h> int main() {int a,b,c;printf("請輸入真分數(a/b):\n");scanf("%1d/%1d",&a,&b);printf("結果為:");while(1){if(b%a) //如果分子不能被分母整除,就計算出一個埃及分數的分母 {c=b/a+1; }else{ //進行化簡 ,分數可以被整除的時候,可以直接化簡為一個埃及分數 c=b/a;a=1;}if(a==1){printf("1/%1d\n",c);break;}else{printf("1/%1d+",c);}a=a*c-b; //計算余數的分子,通分相減b=b*c; //計算余數的分母 if(a==3&&b%2==2) //此種情況下可以直接化簡為兩個埃及分數之和,然后結束循環 {printf("1/%1d+1/%1d\n",b/2,b);break; }} return 0;}4.運行結果:
?
總結
以上是生活随笔為你收集整理的贪心算法之埃及分数问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习:基于主成分分析(PCA)对数据
- 下一篇: 读取csv和tsv文件以及两者的相互转换