C語言 找零問題 程式優化

2021-10-25 07:22:41 字數 1312 閱讀 9483

題目詳情:

現有一元,兩元,五元面額的紙幣若干,給出任意的找零要求,給出每種找零方案,輸出迴圈次數。

優化**一:

**優化內容:

利用num/5,num/2來進行判斷,減少了找零超額的循 環次數。

同時,利用beak跳出迴圈,減少了最後的超額迴圈次數。

優化總結:減少得到答案後的無效迴圈。-----注意:這裡是減少的是找到答案以後的無效迴圈。

**二:

# include

int main (

void

)printf

("%d"

,count)

;return0;

}

優化分析:

(1)紙幣找零面額先從5開始遍歷,這樣可以省去如圖一的在不合格k,j中i的迴圈次數。

**三:增加最小值判斷------當我們從5開始遍歷後,我們可以知道,每增加一張五元紙幣,小面額紙幣可以減少更多,我們可以應用乙個最小值判斷,當以後的迴圈(最外層迴圈)的紙幣總數大於前面的紙幣總的時候,我們可以不用迴圈了。

話題:(回歸到1.2.5的找零問題,圖式**為修改驗證思考**)在這個**的測試過程中,我們發現了乙個有趣的事情,即程式迴圈的次數與最終的方案數相同,那麼,這究竟是怎麼一回事呢?

思考與解答:原來是因為在第二層迴圈中,這位同學更進一步利用了j2<=num-5k直接保證了,i小於零的情況不可能出現。而最小面額是一直接可以對缺少的項進行填充;而當最小面額是二是,就會有奇數帶填充而無法填充的情況,使得最後迴圈次數與方案數不相同。

題外話

在本題最後,這位同學利用6.3.2的面額進行測試,而作者利用7.5.2,進行測試,這時,我們想到了乙個問題,就是6.3.2可不可以遍歷所有整數。

結果:我們只需要考慮互為質因數的兩個找零,6可以刪去,因為6可以由三個2代替,那麼3使得乙個數字成為乙個奇數,二使得這個奇數可以成為大於這個奇數的任何奇數。我們只需要考慮最小的可找零奇數,1–不可,3—可以,所以,我們可以知道,這三種面額的紙幣可以遍歷2及其以上所有整數。

買票找零問題

問題描述 一場激烈足球賽即將開始,售票員緊張地賣票著 每張球票50元,現在有2n 1 n 18 個球迷排隊購票,其中n個手持50元鈔票,另外n個手持100元鈔票。假設開始售票時售票處沒有零錢可以找零。問這2n個人有多少種排隊方式,不至使售票處出現找不出零的局面?例如當n 3時,共6人,3人持50元,...

錢幣找零問題

錢幣找零問題 這個問題在我們的日常生活中就更加普遍了。假設1元 2元 5元 10元 20元 50元 100元的紙幣分別有c0,c1,c2,c3,c4,c5,c6張。現在要用這些錢來支付k元,至少要用多少張紙幣?用貪心演算法的思想,很顯然,每一步盡可能用面值大的紙幣即可。在日常生活中我們自然而然也是這...

錢幣找零問題

題目 假設1元 2元 5元 10元 20元 50元 100元的紙幣分別有c0,c1,c2,c3,c4,c5,c6張。現在要用這些錢來支付k元,至少要用多少張紙幣?用貪心演算法的思想,很顯然,每一步盡可能用面值大的紙幣即可。在日常生活中我們自然而然也是這麼做的。在程式中已經事先將value按照從小到大...