为什么我的 python 程序 ignore/skip 有些情况

Why does my python program ignore/skip some cases

我正在尝试编写执行以下操作的代码:

预期输出满足以下条件:

的 ( i , j ),其中 iand ar[ i ]+ar[ j ] 是可被k整除

问题:我不知道为什么我的代码忽略了一些对。我已经在许多测试用例中尝试过它,但 90% 的测试都失败了,因为它输出的对数比预期的要少。我知道我非常接近正确的结果,我只是不知道我做错了什么。

有关我希望我的代码执行的操作的更准确信息,请查看此 link(无需注册或登录): https://www.hackerrank.com/challenges/divisible-sum-pairs/problem

这是我的代码:

#https://www.hackerrank.com/challenges/divisible-sum-pairs/problem

samples_and_k = [int(x) for x in input().split()]
num_list = [int(y) for y in input().split()]
num_list.sort()
counter =0

for i in range(0, samples_and_k[0]-1):
    for j in range(i+1, samples_and_k[0]-1):
        if (num_list[i]+num_list[i+1]) % samples_and_k[1] == 0:
            counter += 1

print(counter)

这是一个例子:

输入:

6 3
1 3 2 6 1 2

预期输出: 5

我的代码输出: 3

问题是你在使用range()时减去1:

for i in range(0, samples_and_k[0]-1):
    for j in range(i+1, samples_and_k[0]-1):
        if (num_list[i]+num_list[i+1]) % samples_and_k[1] == 0:
            counter += 1

应该是:

for i in range(0, samples_and_k[0]):
    for j in range(i+1, samples_and_k[0]):
        if (num_list[i]+num_list[i+1]) % samples_and_k[1] == 0:
            counter += 1

使用 range() 是一个常见的误解,因为 range() 的实现有些不直观(在我看来)。最后一个数字 不在 范围内,所以 list(range(0, 6)) 等于 [0, 1, 2, 3, 4, 5].