7-2 换硬币 (20分)
生活随笔
收集整理的這篇文章主要介紹了
7-2 换硬币 (20分)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
將一筆零錢換成5分、2分和1分的硬幣,要求每種硬幣至少有一枚,有幾種不同的換法?
輸入格式:
輸入在一行中給出待換的零錢數額x∈(8,100)。
輸出格式:
要求按5分、2分和1分硬幣的數量依次從大到小的順序,輸出各種換法。每行輸出一種換法,格式為:“fen5:5分硬幣數量, fen2:2分硬幣數量, fen1:1分硬幣數量, total:硬幣總數量”。
最后一行輸出“count = 換法個數”。
輸入樣例:
13輸出樣例:
fen5:2, fen2:1, fen1:1, total:4 fen5:1, fen2:3, fen1:2, total:6 fen5:1, fen2:2, fen1:4, total:7 fen5:1, fen2:1, fen1:6, total:8 count = 4解題思路:
這題要判斷一下不同數值的硬幣換取的上限
題目中已經明確說明了每種硬幣至少都有一個
所以在計算某一種硬幣時的數量上限時,就可以用總數將其他兩枚硬幣的數值下限的和減掉
即當待換零錢數額為13時
1分和2分的硬幣至少有一個
那么剩下的數值就是13-1-2即10
5分硬幣的數量最多是10/5, 得到一個整數2
2分和1分硬幣的數值上限計算也是這樣
相較于直接用總數值去除以硬幣數值得到硬幣的數量上限的計算方法來說
這種方法能減少一些判斷次數
聊勝于無
代碼:
#include<bits/stdc++.h> using namespace std; int main(){int x;cin >> x;int max_5 = (x - 2 - 1) / 5;int max_2 = (x - 5 - 1) / 2;int max_1 = (x - 5 - 2) / 1;int count;int num = 0;for(int i = max_5; i >= 1; i--){for(int j = max_2; j >= 1; j--){for(int k = max_1; k >= 1; k--){if(5 * i + 2 * j + k == x){count = i + j + k;printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",i,j,k,count);num ++;}}}}printf("count = %d",num);return 0; }總結
以上是生活随笔為你收集整理的7-2 换硬币 (20分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 摇筛子动画 android,摇骰子动画
- 下一篇: 百度笔试- 买帽子