已知一元以下的硬币中有一分、二分、五分三种面值,列举出将一元兑 换成硬币的所有兑换方法,要求每种硬币至少10枚。

img


已知一元以下的硬币中有一分、二分、五分三种面值,列举出将一元兑
换成硬币的所有兑换方法,要求每种硬币至少10枚。改错

是输出出格式不对吗?改成这样试试
print(i, j, k, sep=',')


coins = [1, 2, 5]  # 硬币面值
num_coins = [10, 10, 10]  # 每种硬币数量


def exchange(amount, coin_index):
    if amount == 0:  # 如果兑换金额为0,说明已经找到一种兑换方法
        print(num_coins)
        return
    if coin_index >= len(coins):  # 如果硬币面值已经遍历完,说明无法兑换成功
        return
    max_num = min(amount // coins[coin_index], num_coins[coin_index])  # 计算当前硬币最多可以使用的数量
    # print(max_num)
    for i in range(max_num, -1, -1):  # 从最多使用数量开始遍历
        num_coins[coin_index] -= i  # 使用i个当前硬币
        exchange(amount - i * coins[coin_index], coin_index + 1)  # 递归处理剩余金额和下一个硬币面值
        num_coins[coin_index] += i  # 回溯,恢复当前硬币数量
        print(num_coins)


exchange(100, 0)  # 兑换1元

看着好像没有问题,手敲了一遍,可以运行,结果也正确。

count=0
for i in range(10,31):
    for j in range(10,21):
        for k in range(10,15):
            if i+2*j+5*k==100:
                count = count+1
                print(i,j,k)
print(count)

img