找零钱问题贪心算法py
时间: 2023-11-19 18:56:14 浏览: 205
找零钱问题是指在给定一定面额的硬币和纸币的情况下,如何用最少的硬币和纸币来凑出一个指定的金额。贪心算法是一种常用的解决找零钱问题的方法,它的基本思想是每次选择面额最大的硬币或纸币来凑出指定金额,直到凑出的金额等于指定金额为止。使用Python语言编写的贪心算法可以直接运行,输入零钱金额后,输出找的零钱面值和数量。你可以参考以下代码实现:
```python
def change_money(money, coins):
coins.sort(reverse=True)
res = []
for coin in coins:
while money >= coin:
res.append(coin)
money -= coin
return res
if __name__ == '__main__':
coins = [1, 5, 10, 50, 100]
money = int(input("请输入零钱金额:"))
res = change_money(money, coins)
print("找零面值和数量为:")
for coin in set(res):
print("{}元的硬币{}个".format(coin, res.count(coin)))
```
相关问题
找零钱问题贪心算法c++
好的,这是一个经典的贪心算法问题。我们假设有一些硬币,它们的面值为 1,5,10,20,50,100 元。现在需要找给顾客一定数量的零钱,问如何用最少的硬币数找给顾客?
我们可以使用贪心算法来解决这个问题。具体做法如下:
1. 首先将硬币按面值从大到小排序。
2. 从面值最大的硬币开始,不断地用当前面值的硬币去尽量多地找零,直到找完或者不能再找为止。然后再用下一个面值的硬币去找零,以此类推。
3. 直到找完所有需要找的零钱为止。
下面是 C++ 的代码实现:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> coins = {100, 50, 20, 10, 5, 1}; // 硬币面值
vector<int> change(int n) {
vector<int> result;
for (int i = 0; i < coins.size() && n > 0; i++) {
while (n >= coins[i]) {
result.push_back(coins[i]);
n -= coins[i];
}
}
return result;
}
int main() {
int n = 123;
vector<int> result = change(n);
for (int i = 0; i < result.size(); i++) {
cout << result[i] << " ";
}
return 0;
}
```
这里我们定义一个 `change` 函数,它接受一个正整数 `n`,表示需要找的零钱数,返回一个由硬币面值组成的向量 `result`,表示找零的方案。在函数中,我们按照硬币面值从大到小的顺序循环,每次用当前面值的硬币尽量多地找零,直到找完或者不能再找为止。最后返回找零方案即可。
注意,这个贪心算法的正确性是显然的,因为每次都使用当前面值的硬币尽量多地找零,所以能够保证找到最优解。
找零钱问题贪心算法c语言
找零钱问题是指在给定一定面额的硬币和需要找零的金额的情况下,如何使用最少的硬币找找零钱问题是指在给定一定面额的硬币和需要找零的金额的情况下,如何使用最少的硬币找零。贪心算法是一种常用的解决此类问题的方法,它的思路是每次选择当前可用的最大面额的硬币进行找零,直到找完为止。在C语言中,可以使用循环嵌套的方式来实现贪心算法解决找零钱问题。具体实现可以参考引用中的代码。同时,引用和引用中也提供了关于贪心算法的思路和实现方式的介绍。
阅读全文