所以我试图从UVa在线评判中解决以下问题:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2864
我在Python中编写了以下代码:
t = int(input())
for i in range(t):
highs = 0
lows = 0
walls = int(input())
heights = [0]*50
for h in range(walls):
heights[h] = (int(input()))
for j in range(1, walls):
if (heights[j] < heights[j - 1]):
highs += 1
elif (heights[j] > heights[j - 1]):
lows += 1
print("Case %d: %d %d" % (i + 1, highs, lows))
exit(0)
每次我尝试不同测试用例的代码时,都会得到预期的输出;它在我的身边工作得非常好,但是当我提交它时,我继续遇到运行时错误。我现在很绝望,因为我已经尝试了一百万件事而且没有任何作用。请帮忙。
答案 0 :(得分:1)
我认为错误就在这里:
for h in range(walls):
heights[h] = (int(input()))
input()
读取一行,然后int()
尝试将该行转换为整数。但是"1 4 2 2 3 5 3 4"
不能转换为整数,如果你读了8行,你可能会用尽输入。
相反,请尝试
heights = [int(i) for i in input().split()]
应返回[1, 4, 2, 2, 3, 5, 3, 4]
。
答案 1 :(得分:0)
正如所建议的那样,运行时错误出现在代码的这一部分中:
for h in range(walls):
heights[h] = (int(input()))
您可以更改
heights = [int(i) for i in input().split()]
并省略该行
heights = [0]*50
我发现的另一件事是你以相反的方式计算低点和高点。你应该这样做:
if (heights[j] < heights[j - 1]):
lows += 1
elif (heights[j] > heights[j - 1]):
highs += 1
那应该有用。希望你得到解决方案接受;)