python实现10元x张,5元y张,2元z张凑整n元
时间: 2023-07-09 08:08:41 浏览: 62
可以使用贪心算法来解决这个问题。具体思路如下:
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
```