【ACM小白成长撸】--贪婪法解硬币找零问题

question:假设有一种货币,它有面值为1分、2分、5分和1角的硬币,最少需要多少个硬币来找出K分钱的零钱。按照贪婪法的思想,需要不断地使用面值最大的硬币。如果找零的值小于最大的硬币值,则尝试第二大的硬币,依次类推。

 1 /*程序的版权和版本声明部分:
 2 **从《C++程序设计思想与方法》(作者:翁惠玉)P61转载
 3 */
 4 #include <iostream>
 5 
 6 using namespace std;
 7 
 8 #define ONEFEN 1
 9 #define TWOFEN 2
10 #define FIVEFEN 5
11 #define ONEJIAO 10
12 
13 int main(void)
14 {
15     int money;
16     int onefen = 0, twofen = 0, fivefen = 0, onejiao = 0;
17 
18     cout << "输入要找零的钱(以分为单位):";
19     cin >> money;
20 
21     //不断尝试每一种硬币
22     while(money >= ONEJIAO)
23     {
24         onejiao++;
25         money = money - ONEJIAO;
26     }
27     while(money >= FIVEFEN)
28     {
29         fivefen++;
30         money = money - FIVEFEN;
31     }
32     while(money >= TWOFEN)
33     {
34         twofen++;
35         money = money - TWOFEN;
36     }
37     while(money >= ONEFEN)
38     {
39         onefen++;
40         money = money - ONEFEN;
41     }
42 
43     cout << "1角硬币数:" << onejiao << endl;
44     cout << "5分硬币数:" << fivefen << endl;
45     cout << "2分硬币数:" << twofen << endl;
46     cout << "1分硬币数:" << onefen << endl;
47 
48     return 0;
49 }

 

posted @ 2016-10-11 23:14  Amoshen  阅读(1161)  评论(0编辑  收藏  举报