有一个任务:
该文件包含 10,000 个正整数的序列。每个数字不超过 10,000。确定并在答案中首先写下元素和为 7 的倍数的序列中元素对的数量,然后写下这些对的元素和的最大值。在这个问题中,一对表示序列的两个不同元素。一对中元素的顺序并不重要。
我的代码:
with open('file.txt') as f:
s = [int(x) for x in f]
result = []
for i in range(0, len(s) - 1):
for j in range(1, len(s)):
if (s[i] + s[j]) % 7 == 0:
r.append(s[i] + s[j])
print(len(r), max(r))
答案应该是:7142586 19992(1 - 7 的倍数对数;2 - 最大可能数量)
我的代码导致14283730 19992。我无法弄清楚为什么对数不同
问题是你制作的循环
i
相互j
独立,这很容易导致同一对数字被计算两次的情况。例如,withi = 2
和j = 3
程序不会干扰获取i = 3
和j = 2
处理它,尽管理论上一对具有给定索引的数字将等同于前一对。1
为了解决这个问题,第二个循环不是用 开始,而是用-开始就足够了,i + 1
所以不会有重复的对,并且所有的数字对都将被处理一次。