CodingBat sum67:为什么这个解决方案是错误的?

2024-05-08

我正在解决以下codingbat问题:

返回数组中数字的总和,但忽略以 6 开头并延伸到下一个 7 的数字部分(每个 6 后面至少有一个 7)。如果没有数字则返回 0。

sum67([1, 2, 2]) → 5
sum67([1, 2, 2, 6, 99, 99, 7]) → 5
sum67([1, 1, 6, 7, 2]) → 4

我的解决方案是:

def sum67(nums):
    sum = 0 
    throwaway = 0
    for i in range(len(nums)):
        if throwaway == 0:
            if nums[i] == 6:
                throwaway = 1
        elif throwaway == 1 and i > 0 and nums[i-1] == 7:
            throwaway = 0
        if throwaway == 0:
            sum += nums[i]
    return sum

我完全知道这不是最好的解决方案,但我只是想知道为什么这是错误的。您能否解释一下为什么这是错误的以及在哪种特定情况下会给出错误的结果?


好吧,你的程序有一个错误。检查以下结果:

print sum67([1,2,5])
print sum67([1,2,6,5,7])
print sum67([1,2,6,5,7,6,7])

这将打印:

8
3
16 <-- wrong

如果 7 后面紧跟着 6,则您将把 6 和后面的所有数字相加。我不确定输入中是否允许超过 6 ... 7 的范围,但如果是,您必须修复您的算法。

这个简单的实现确实返回正确的数字:

def sum67(nums):
    state=0
    s=0
    for n in nums:
        if state == 0:
            if n == 6:
                state=1
            else:
                s+=n
        else:
            if n == 7:
                state=0
    return s

此外,如果由于某些晦涩的原因不需要使用索引,则可以直接迭代列表的元素(for element in list: ... ).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CodingBat sum67:为什么这个解决方案是错误的? 的相关文章

随机推荐