题目:
输入一个金额,用100、50、20、10、5、1进行换算。
(不一定是这几张面额、而且这几张面额的数量也可以有限制。
为了简化问题,这里选取了人民币的面额,以及默认每种面额都没有数量限制)
代码:
1.贪心算法
//输入一个金额,用100、50、20、10、5、1进行换算
#include <iostream>
using namespace std;
int main()
{
cout << "输入一个金额,用100、50、20、10、5、1进行换算" << endl << endl;
int money, number[6] = { 0 };
cout << "请输入一个金额:";
cin >> money;
int tmp = money, j = 0;
/*tmp用于存money的值,因为最后输出时要用到money,
但money的值在中间步骤中已作为了循环的一部分而改变了*/
for (int i : {100, 50, 20, 10, 5, 1})
{
if (tmp / i != 0)
{
number[j] = tmp / i;
tmp = tmp - (tmp / i) * i;
}
j = j + 1; //每一次进入循环都换了一种货币
}
j = 0; //重置j=0
cout << endl << money << "元等价于";
for (int i : {100, 50, 20, 10, 5, 1})
{
if (number[j] == 0) goto number0; //不输出无用的数量0
if (j == 5) cout << number[j] << "张" << i << "元";
else cout << number[j] << "张" << i << "元、";
number0:
j = j + 1; //每一次进入循环都换了一种货币
}
cout << endl << endl;
system("pause");
return 0;
}
2.动态规划