题目描述 哈哈哈~~~学委喜欢的女生失恋了~~ 那么这时学委带着自己喜欢的女生去逛街啦!! 他带了若干张1元,2元,5元,10元,20元,50元,100元的纸币,结帐的时候学委要支付n 元,毕竟和喜欢的女生在一起,掏出太多张钱结账是很丢脸的!!那么问题就来了,已知学委有的这些面额的张数,那么学委最少需要多少张纸币才能支付n元?如果不能支付n元,那么输出“xuewei,ni zhe chou diaosi”; 输入 输入文件第一行是T,表示T 组数据(1<=T<=10001); 每组数据有两行,第一行是n(1<=n<=1e4),代表学委要付的款; 第二行有7个整数a1,a2...a7(0<=a1<=100),分别代表1元,2元,5元...100元的张数; 输出 如果能支付n元,输出最少需要的张数,否则输出“xuewei,ni zhe chou diaosi”;
时间: 2024-02-15 10:01:37 浏览: 132
这是一道典型的贪心算法题目。针对每个面额,我们都尽可能地使用多个这个面额的纸币,直到无法再使用为止。
下面是Python的代码实现:
```python
T = int(input())
for _ in range(T):
n = int(input())
nums = list(map(int, input().split()))
# 面额数组
values = [1, 2, 5, 10, 20, 50, 100]
# 记录每个面额使用的张数
used = [0] * len(values)
# 从大到小遍历面额
for i in range(len(values) - 1, -1, -1):
# 使用当前面额的纸币数量
count = min(nums[i], n // values[i])
used[i] = count
n -= count * values[i]
# 如果n不为0,无法支付,输出提示
if n != 0:
print("xuewei,ni zhe chou diaosi")
else:
# 计算总共使用的纸币数量
ans = sum(used)
print(ans)
```
这里使用了一个`used`数组来记录每个面额使用的张数,这个数组的长度为7,对应了题目中给出的7种面额。在遍历每个面额时,使用`min(nums[i], n // values[i])`计算出当前面额纸币的最大使用数量,然后更新`used`数组和`n`的值。最后如果`n`不为0,即无法支付,输出提示;否则,计算`used`数组的和,即为最少需要的张数。
阅读全文