传送门
这道题在题面上明确地给出了要求:用一重循环和字典来完成,第一版确实没有注意这个问题,于是就出现了下列问题,导致有测试点卡住过不去:
a = list(map(int,input().split(",")))
a.sort()
flag = 0
n = int(input())
for i in range(len(a)):
for j in range(i,len(a)):
if a[i] + a[j] == n:
print("%d %d"%(a[i],a[j]))
flag = 1
break
if flag == 0:
print("no answer")
因为没有对两个循环进行限制,导致循环元素进行了重复:如果用下面这个例子进行对拍,很容易就能发现问题所在:
1,2,9
4
如果在上面程序运行,因为使用二重循环所以程序会认为2+2=4,事实上这个样例应当输出"no answer"
那么标程是这样写的:
nums = list(map(int,input().split(',')))#去掉逗号
target = int(input())
hm = dict()
for i in range(len(nums)):
if nums[i] in hm:
print(hm[nums[i]], i)
break
hm[target - nums[i]] = i#比如2+7 = 9,这样就把7加入到字典中去,循环往复判断最终得到结论
else:
print("no answer")