“您将获得一个n个整数和整数k的数组。查找并打印(i,j)
对的数量,其中i<j and a[i] + a[j]
可被k整除。”
示例输入为:
6 3
1 3 2 6 1 2
其中6是n,3是k,第二行是整数数组。此输入的输出为5。
这是我的代码,但我没有通过测试用例,而且几乎是肯定的,它与我如何索引它有关。
import sys
n,k = input().strip().split(' ')
n,k = [int(n),int(k)]
a = [int(a_temp) for a_temp in input().strip().split(' ')]
count=0;
for i in range(n):
curr = n-i
for j in range(curr):
if i < i + j:
if k % (a[i] + a[i+j]) ==0:
count = count + 1
print(count)
此外,后续问题:这种方法我是否正在接近一种有效的方法呢?
答案 0 :(得分:2)
k % ...
表示“k
可被......整除”,而不是“......可被k
整除”。if i < i + j
不是很有用;你最好不要做富拉斯在评论中推荐的内容。答案 1 :(得分:2)
你可以试试这个......
import sys
n,k = input().strip().split(' ')
n,k = [int(n),int(k)]
a = [int(a_temp) for a_temp in input().strip().split(' ')]
print(sum([1 for i in range(n) for j in range(i) if (a[i]+a[j])%k==0]))
答案 2 :(得分:0)
您需要的是使用itertools.combinations
:
from itertools import combinations
count = 0
for i, j in combinations(range(n), 2):
if i < j and (a[i] + a[j]) % k == 0:
print i, j
count += 1
range(n)
返回索引列表0 .. n-1 combinations(range(n), 2)
将生成两个索引的列表(没有重复)(a[i] + a[j]) % k == 0
是您要求的测试combinations
将产生i,j对,其中i总是小于j,但测试i < j
是偏执量