我为SPOJ.com中的“时尚”问题编写的代码无法正确接收以下输入:
2
2
1 1
3 2
3
2 3 2
1 3 2
代码:
x = int(input())
spam = []
for i in range(x):
y = int(input())
for j in range(y):
z = list(map(int, input().split()))
if j == 0:
z.insert(0,y)
spam.extend(z)
目标是将所有输入(除了第一个数字)存储在垃圾邮件列表中,然后将其用于解决问题。有人可以推荐此修复程序吗?
答案 0 :(得分:3)
我一直在研究Fashion问题,这是您可以接受输入并成功提交问题的一种方法:
t = int(input()) # number of test cases
# from the problem
# Each test case consists of 3 lines:
# The first line contains a single integer N (1 <= N <= 1000).
# The second line contains N integers separated by single spaces denoting the hotness levels of the men.
# The third line contains N integers separated by single spaces denoting the hotness levels of the women.
for _ in range(t):
input() # first line contian the number of participants, we do not need
men_data = sorted(map(int, input().split()))
women_data = sorted(map(int, input().split()))
print(sum(m*w for m, w in zip(men_data, women_data)))
因此,在您的情况下,y
被错误地认为是下一行的号码,y
就是给您下两行的号码,换句话说,是给您参加人数
答案 1 :(得分:1)
鉴于spam
将是一个平面列表,实际上您不需要所有这些嵌套循环。一个列表理解就足够了。
from itertools import islice
import sys
spam = [int(x) for line in islice(sys.stdin, 1, None) for x in line.split()]
尽管请注意,但这确实假定应该消耗标准输入的 all 。例如,如果您只想读取重定向文件的开头,或者从终端以交互方式输入数据,那么这是不合适的,因为我们没有使用行数来控制循环何时停止。>
答案 2 :(得分:0)
此代码有效。输入if
后,您应该获得y
条件。
x = int(input())
spam = []
for i in range(x):
y = int(input())
if y == 0:
z.insert(0,y)
pass
for j in range(y):
z = list(map(int, input().split()))
spam.extend(z)
print(spam)