贪婪算法找零钱python
时间: 2023-10-12 11:18:49 浏览: 91
可以使用贪心算法解决找零钱问题,即每次找最大面额的硬币,直到总金额减为0。以下是 Python 代码示例:
```python
def greedy_coin_change(amount, coins):
coins.sort(reverse=True)
count = 0
for coin in coins:
while amount >= coin:
amount -= coin
count += 1
return count
```
其中,`amount` 是需要找零的金额,`coins` 是可用的硬币面额列表。函数返回最少需要找的硬币数量。
相关问题
头歌实验六 贪婪算法,找零钱
贪婪算法是一种基于贪心策略的算法,它在每一步都选择当前看起来最优的选项,以期望最终得到全局最优解。找零钱问题是一个经典的使用贪婪算法解决的问题。
假设你需要找零 $n$ 元钱,你手里有若干种面值的硬币,如 1 元、5 元、10 元、20 元、50 元、100 元等。现在要求尽可能少地使用硬币找零,该怎么办?
一个简单而有效的贪婪策略是每次选取面值最大的硬币进行找零。在找零过程中,每次都用尽可能多的面值最大的硬币,直到找完为止。这个方法的正确性可以通过反证法证明。
下面是一个 Python 实现:
```python
def change(n, coins):
"""
在硬币列表 coins 中找零 n 元钱,返回所需的硬币数量。
"""
coins.sort(reverse=True) # 按面值从大到小排序
count = 0
for coin in coins:
while n >= coin:
n -= coin
count += 1
return count
```
这个函数接受两个参数:要找零的金额 $n$ 和硬币列表 coins。它首先按硬币面值从大到小排序,然后从大到小遍历硬币列表,每次用尽可能多的当前面值的硬币进行找零,直到零钱全部找完为止。
例如,如果要找零 63 元,可用的硬币面值分别为 1 元、5 元、10 元、20 元和 50 元,可以这样调用该函数:
```python
coins = [1, 5, 10, 20, 50]
n = 63
count = change(n, coins)
print(count) # 输出 5
```
这个例子中,找零 63 元需要 5 个硬币,分别是 50 元、10 元、1 元、1 元、1 元。
用货币交易时,经常出现找零钱的问题,如何找零钱能使货币数量最少,用贪婪算法编写一程序
为您提供一个基于贪心算法的找零钱程序:
```python
def find_change(denominations, amount):
change = []
total = 0
i = len(denominations) - 1
while i >= 0 and total != amount:
while total + denominations[i] <= amount:
total += denominations[i]
change.append(denominations[i])
i -= 1
return change
denominations = [1, 5, 10, 50, 100]
amount = 68
change = find_change(denominations, amount)
print(change)
```
程序的执行结果为:`[50, 10, 5, 1, 1, 1]`,表示找零钱时使用了两个 50 元、一个 10 元、一个 5 元和三个 1 元,总共找出了 68 元,使得货币数量最少。
该程序的贪心策略是每次使用面额最大的钱币,并将其不断累加,直到无法再添加为止。由于每次使用的面额最大,因此能够使得货币数量最少。
阅读全文