【问题标题】:Why does my python program ignore/skip some cases为什么我的 python 程序忽略/跳过某些情况
【发布时间】:2025-11-23 23:05:02
【问题描述】:

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

  • 在第一行中,它输入了两个以空格分隔的整数,第一行表示列表的长度,稍后将输入,第二行表示一个 int,称为k,稍后将需要它。

  • 在第二行,输入我说的列表

预期输出满足以下条件:

( i , j ) 的数量,其中 i和 ar[ i ]+ar[ j ] 是整除 k.

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

有关我希望我的代码做什么的更准确信息,请查看此链接(无需注册或登录):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

MY代码的输出: 3

【问题讨论】:

  • 请添加当前和预期的输出。
  • @Justlearnedit 我刚刚做到了。
  • 用你自己的话说,写for i in range(0, samples_and_k[0]-1):的时候,写-1的原因是什么?用您自己的话来说,如果您写了例如for i in range(0, 5):,您希望i 具有什么价值?现在,您查看文档了吗?您尝试过吗? range 的工作方式是否符合您的预期?

标签: python loops implementation


【解决方案1】:

问题是你用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]

【讨论】:

  • 哦,我明白了!你解决了我的问题,谢谢一百万:))