python实现10元,5元,2元纸币凑整
时间: 2023-07-09 19:08:40 浏览: 60
可以使用贪心算法来实现。
首先将面值从大到小排序,然后从大面值开始尽量多的取,直到无法再取为止,然后依此类推。
具体实现代码如下:
```python
def money_change(num):
money_list = [10, 5, 2]
change_list = []
for money in money_list:
while num >= money:
num -= money
change_list.append(money)
return change_list if num == 0 else None
```
其中,`num` 表示需要凑整的金额,`money_list` 表示面值列表,`change_list` 用于存储结果。
测试一下:
```python
>>> money_change(23)
[10, 10, 2, 1]
>>> money_change(7)
[5, 2]
>>> money_change(20)
[10, 10]
>>> money_change(3)
None
```
可以看到,当金额无法凑整时,返回 `None`。
相关问题
python实现10元x张,5元y张,2元z张凑整n元
可以使用贪心算法来解决这个问题。具体思路如下:
1. 首先,将所需凑整的金额n按照2元、5元、10元的顺序进行拆分,得到需要的2元个数z、5元个数y、10元个数x。
2. 如果此时n不能被凑出,则将x、y、z逐个减1,直到可以被凑出为止。
3. 如果减到x、y、z都为0时仍然无法凑出n,则说明无解。
4. 如果凑出来了,最终的方案就是x张10元、y张5元、z张2元。
下面是使用Python实现以上思路的代码:
```python
def make_change(n):
# 分别代表10元、5元、2元的个数
x, y, z = n // 10, (n % 10) // 5, (n % 10 % 5) // 2
# 逐个减1,直到可以被凑出或者无解
while n % 2 != 0 and x > 0:
x -= 1
n += 10
while (n % 2 != 0 or n % 5 != 0) and y > 0:
y -= 1
n += 5
while n % 2 != 0 and z > 0:
z -= 1
n += 2
# 无解
if n % 2 != 0:
return None
# 返回方案
return x, y, z
```
使用示例:
```python
>>> make_change(23)
(2, 1, 1)
>>> make_change(28)
(2, 1, 3)
>>> make_change(7)
None
```
python100元换成1元2元5元
假设有100元钞票,要换成1元、2元、5元的零钱。
首先,我们可以将100元分别除以1、2、5,得到需要的1元、2元、5元数量:
- 100 ÷ 1 = 100,需要100个1元;
- 100 ÷ 2 = 50,需要50个2元;
- 100 ÷ 5 = 20,需要20个5元。
然后,我们可以用循环来模拟换钞的过程,每次从100元中减去已经换出去的钱,直到换完为止。具体实现可以参考下面的代码:
```python
total_money = 100 # 总金额
num_1 = # 1元数量
num_2 = # 2元数量
num_5 = # 5元数量
while total_money > :
if total_money >= 5:
num_5 += 1
total_money -= 5
elif total_money >= 2:
num_2 += 1
total_money -= 2
else:
num_1 += 1
total_money -= 1
print("1元:%d个,2元:%d个,5元:%d个" % (num_1, num_2, num_5))
```
输出结果为:
```
1元:20个,2元:50个,5元:10个
```
这样就完成了100元换成1元、2元、5元的零钱的过程。