日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

贪心算法之埃及分数问题

發布時間:2024/3/24 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 贪心算法之埃及分数问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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.運行結果:

?

總結

以上是生活随笔為你收集整理的贪心算法之埃及分数问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。