给定一组整数,还有一个目标数,在给定这组整数中找到两个数字,使其和为目标数,如找到,解是唯一的。找不到则显示 "no answer"。输出的下标按从小到大排序。一重循环加字典实现。
输入格式:
在一行中给出这组数。 在下一行输入目标数
输出格式:
在一行中输出这两个数的下标,用一个空格分开。
输入样例1:
在这里给出一组输入。例如:
2,7,11,15
9
输出样例1:
在这里给出相应的输出。例如:
0 1
输入样例2:
在这里给出一组输入。例如:
3,6,9
10
输出样例2:
在这里给出相应的输出。例如:
no answer
解题思路:因为题设已经说了只能使用一重循环加字典实现,所以我们没办法使用双重循环去求出每一个的值,逐一比较。
先建立一个 列表值:差 的字典。
在通过对字典对键的遍历,判断差值是否存在于数字列表中。
n_list = list(map(int, input().split(",")))
n = int(input())
sum_dict = {}
#建立 列表值:差 的字典
for i in n_list:
if i not in sum_dict.keys():
sum_dict[i] = n - i
for k,v in sum_dict.items():
if v in n_list:
if k != v:#考虑了类似2+2=4这样的数据,所以加了判断
i = n_list.index(k)
j = n_list.index(v)
print("%d %d"%(i, j))
break
else:
i = n_list.index(k)
j = n_list[i+1:].index(v)+1
print("%d %d"%(i,j))
break
else:
print("no answer")
不过有点值得注意的是,这样的解法感觉有点绕弯子,不如只用一重循环来得直接。如有更符合题意得解法,欢迎互相交流[哭笑]。
网友评论