"""
给定一个数组,找出数组中是否有两个数对(a,b)和(c,d),使得a+b=c+d,其中,a、b、c、d是不同的元素。
如果是多个答案,打印任意一个即可。
例如给定数组[3,4,7,10,20,9,8],可以找到连个数组(3,8)和(4,7),使得3+8=4+7
"""
# 用来存储数对
class pair:
def __init__(self, first, second):
self.first = None
self.second = None
self.first = first
self.second = second
def findPairs(arr):
# 键为数对的和,值为数对
sumPair = dict()
n = len(arr)
# 遍历数组中所有可能的数对
i = 0
while i<n:
j = i + 1
while j<n:
# 如果这个数对的和在map中没有,则放入mapz中
sums = arr[i] + arr[j]
if sums not in sumPair:
sumPair[sums] = pair(i, j)
# 如果map中已经存在与sum相同的数对了,找出并打印出来
else:
p = sumPair[sums]
print('(' + str(arr[p.first]) + ',' + str(arr[p.second]) + '),('
+ str(arr[i]) + ',' + str(arr[j]) + ')')
return True
j+=1
i+=1
return False
if __name__=='__main__':
arr = [3,4,7,10,20,9,8]
findPairs(arr)