假设商店货品价格(R) 皆不大于 100 元(且为整数) ,若顾客付款在 100 元内(P) , 求找给顾客最少货币个(张)数?(货币面值 50 元 10 元, 5 元, 1 元四种 )用等价类划分法实现
时间: 2024-02-03 15:12:34 浏览: 129
根据等价类划分法,我们可以将顾客支付金额 P 分成以下几个等价类:
- P = 0,无需找零,找零张数为 0。
- 0 < P <= 4,只能用 1 元面值的货币找零,找零张数为 P 张。
- 4 < P <= 9,可以使用 5 元和 1 元面值的货币找零,找零张数为 P / 5 向下取整的张数加上 (P % 5) 张。
- 9 < P <= 49,可以使用 10 元、5 元和 1 元面值的货币找零,找零张数为 P / 10 向下取整的张数加上 ((P % 10) / 5) 张加上 ((P % 10) % 5) 张。
- 49 < P <= 99,可以使用 50 元、10 元、5 元和 1 元面值的货币找零,找零张数为 P / 50 向下取整的张数加上 ((P % 50) / 10) 张加上 (((P % 50) % 10) / 5) 张加上 (((P % 50) % 10) % 5) 张。
因此,我们可以编写如下的 Python 代码来实现这个算法:
```
def min_coin_count(p):
if p == 0:
return 0
elif p <= 4:
return p
elif p <= 9:
return p // 5 + p % 5
elif p <= 49:
return p // 10 + (p % 10) // 5 + (p % 10) % 5
else:
return p // 50 + (p % 50) // 10 + ((p % 50) % 10) // 5 + ((p % 50) % 10) % 5
print(min_coin_count(47)) # 输出 4
```
这个算法的时间复杂度为 O(1),因为它只需要进行一次数学运算即可得出最少的货币张数。
阅读全文