假设现在有面值为1元,3元,5元的硬币若干枚,如何用最少硬币数凑够需要的金额?现输入一个表示需要的金额,要求输出一个整数表示最少的硬币数。用c++代码做出来
时间: 2024-02-28 14:54:01 浏览: 89
好的,以下是使用贪心算法解决这个问题的C++代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
// 输入需要凑够的金额
int amount;
cin >> amount;
// 定义三种硬币的面值
vector<int> coins = {5, 3, 1};
// 定义计数器和余额
int count = 0;
int balance = amount;
// 贪心算法
for (int i = 0; i < 3; i++) {
while (balance >= coins[i]) {
balance -= coins[i];
count++;
}
}
// 输出结果
cout << count << endl;
return 0;
}
```
首先,我们定义三种硬币的面值,然后定义计数器count和余额balance,初始值分别为0和需要凑够的金额amount。接下来,我们从面值最大的硬币开始,尽可能多地使用该硬币凑出余额,直到余额小于该硬币面值为止。然后,再使用面值次大的硬币,以此类推,直到余额为0为止。最后,输出计数器count即可。
需要注意的是,贪心算法并不一定能够得到最优解。在这个问题中,当需要凑够的金额为8时,贪心算法会先选一个5元硬币,再选一个3元硬币,共需两枚硬币。但实际上,最优解是使用三个1元硬币,共需三枚硬币。因此,对于一些特殊情况,贪心算法并不一定是最好的选择。
阅读全文