牛客网python提交代码,本地ide通过,结果显示 返回非零

返回非零的一个小的解决方案

题目描述

Z国的货币系统包含面值1元、4元、16元、64元共计4种硬币,以及面值1024元的纸币。现在小Y使用1024元的纸币购买了一件价值为N (0 < N \le 1024)N(0<N≤1024)的商品,请问最少他会收到多少硬币?

输入描述:
一行,包含一个数N。
输出描述:
一行,包含一个数,表示最少收到的硬币数。

示例1
输入
200
输出
17

说明
花200,需要找零824块,找12个64元硬币,3个16元硬币,2个4元硬币即可。

备注:
对于100%的数据,N (0 < N \le 1024)N(0<N≤1024)。

本地IDE代码

# 本地代码,验证通过的
def minCoins(N):
    if N == 1024:
        return 0
    tmp = 1024 - N
    dp = [tmp] * (tmp + 1)
    dp[0], dp[1] = 0, 1
    for i in range(2, tmp + 1):
        for coin in [1, 4, 16, 64]:
            if tmp < coin:
                continue
            dp[i] = min(dp[i], dp[i - coin] + 1)
    return dp[1024 - N]


if __name__ == "__main__":
    print(minCoins(123))

牛客网提交

N = int(input())
if N == 1024:
    print(0)
tmp = 1024 - N
dp = [1024] * (tmp + 1)
dp[0], dp[1] = 0, 1
for i in range(2, tmp + 1):
    for coin in [1, 4, 16, 64]:
        if tmp < coin:
            continue
        dp[i] = min(dp[i], dp[i - coin] + 1)
print(dp[tmp])

牛客网提交后,死活不通过,显示结果非零
查询得知,结果非零的意思的代码退出的时候不是以正常的0退出的,而是非0状态,也就是代码出错了
百思不得其解,到底为什么,除了一个return换成了print,其他没变

解决

将提交的牛客网代码塞入本地shell,查看运行结果,原来是print惹的祸
平常写函数的时候,遇到特定条件,直接return返回,那return后面的代码将不会被执行
但是换成print的时候,后面的代码还是会执行,一旦N=1024的时候,数组就越界了,自然而然报错
也就是说,我们要造成类似return的效果

因为是在shell中执行的,所以改成以下代码即可

N = int(input())
if N == 1024:
    print(0)
    exit(0)
tmp = 1024 - N
dp = [1024] * (tmp + 1)
dp[0], dp[1] = 0, 1
for i in range(2, tmp + 1):
    for coin in [1, 4, 16, 64]:
        if tmp < coin:
            continue
        dp[i] = min(dp[i], dp[i - coin] + 1)
print(dp[tmp])
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值