gpt4 book ai didi

python - 我需要找到自然数的排列,使得 abs(pos[i]-i==k) ,其中 k 对于所有自然数都是常数

转载 作者:太空宇宙 更新时间:2023-11-03 20:43:38 26 4
gpt4 key购买 nike

if n=4
first natural numbers are [1,2,3,4]
we could rearrange to [3,4,1,2]
so that pos[i]-i==2 for every natural no

https://www.hackerrank.com/challenges/absolute-permutation/problem

t 是测试用例

def absolutePermutation(n, k):
for i in range(t):
pos=[]
for j in range(1,n+1):
if(j+k<=n):
pos.append(j+k)
elif(j==k):
pos.append(j)
else:
pos.append(j-k)
if all(abs(pos[x]-(x+1))==k for x in range(len(pos))):
return pos
else:
return [-1]

10 5

输出

6 7 8 9 10 1 2 3 4 5

10 1

我得到了错误的答案预期输出

2 1 4 3 6 5 8 7 10 9

最佳答案

我的解决方案是部分的,仅当 n/k 是偶数时才有效,我不确定是否存在 n/k 不偶数时的解决方案

n=20
k=5
naturals = list(range(n))
permu = []
for i in range(0,(n//k), 2):
permu += naturals[(i + 1) * k:(i + 2) * k]
permu += naturals[i * k:(i + 1) * k]
print(permu)
check = [permu[i] - i for i in range(n)]
print(check)

输出

[5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 15, 16, 17, 18, 19, 10, 11, 12, 13, 14]
[5, 5, 5, 5, 5, -5, -5, -5, -5, -5, 5, 5, 5, 5, 5, -5, -5, -5, -5, -5]

这也适用于 n=4、n=8、k=2(如您的示例)

关于python - 我需要找到自然数的排列,使得 abs(pos[i]-i==k) ,其中 k 对于所有自然数都是常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56723084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com