我需要创建一个包含数字数组的程序,检查每个数字是否大于所有先前数字的总和,如果满足条件,则输出true,否则输出false。我的审判如下:
import fileinput
a0 = [int(i) for i in fileinput.input()]
a = a0[1:]
b=[]
for i in range(1, a0[0]+1):
b.append(a[i])
if (a[i+1] > sum(b)):
print("true")
break
else:
print ("false")
break
我的程序可用于一半的测试用例,但不能用于其他测试。你能帮我弄清楚我做错了什么吗?非常感谢您的协助。
在真实情况下,您为时过早。仅因为第一个元素检查,并不意味着所有其他元素也将检查:
for i in range(1, a0[0]+1):
b.append(a[i])
if (a[i+1] <= sum(b)):
print ("false")
break
else: # for-else: else is executed only if loop isn't `break`ed out of
print("true")
仅在循环结束后没有找到反例,您才能确保它对整个列表都适用。
更简洁的写法是:
import fileinput
_, *a = (int(i) for i in fileinput.input())
s = 0 # just keep track of total
for num in a:
if (num <= s):
print("false")
break
s += num
else:
print("true")