python中摆式排列的打印数组
我应该按钟摆排列打印阵列。对于某些输出,我的答案是正确的,但对于某些输出,我的答案是错误的。为什么会这样python中摆式排列的打印数组,python,arrays,python-3.x,Python,Arrays,Python 3.x,我应该按钟摆排列打印阵列。对于某些输出,我的答案是正确的,但对于某些输出,我的答案是错误的。为什么会这样 test_case = int(input()) for i in range(0, test_case): n = int(input()) arr = [int(i) for i in input().split()] arr.sort() arr1 = [0] * n mid = int((n - 1) / 2) arr1[mid] =
test_case = int(input())
for i in range(0, test_case):
n = int(input())
arr = [int(i) for i in input().split()]
arr.sort()
arr1 = [0] * n
mid = int((n - 1) / 2)
arr1[mid] = arr[0]
i = 1
j = 1
for i in range(1, mid + 1):
arr1[mid + i] = arr[j]
j += 1
arr1[mid - i] = arr[j]
j += 1
if (int(n % 2) == 0):
arr1[mid + i] = arr[j]
print(' '.join(map(str, arr1)))
在这里,我尝试了两个测试用例。对于第一个测试用例,我的输出是正确的,但是对于第二个测试用例,大小为8的数组我的输出是错误的
2 #no. of test cases
5 # size of 1st array
4 1 3 2 5 #1st Input
5 3 1 2 4 # correct output
8 #size of 2nd array
539 161 985 856 166 29 726 590 #2nd input
856 590 166 29 161 539 985 0 # Wrong output
第二个测试用例的预期输出为:
856 590 166 29 161 539 726 985
为什么不仅仅是这样:
lst = [539, 161, 985, 856, 166, 29, 726, 590]
def pendulum(lst):
srt = sorted(lst)
return list(reversed(srt[0::2])) + srt[1::2]
ret = pendulum(lst)
# [856, 590, 166, 29, 161, 539, 726, 985]
对列表进行排序,然后取其他元素并将其组合到新列表中
注意,函数接受列表并返回一个列表;您可能需要首先将字符串拆分为一个列表lst=[inti for i in input.split],然后您可能希望在末尾转换结果:strg=''.joinstri for i in ret
在您的代码中,如果n=8,您将得到mid=3;我将从1到3不等,因此中间+1为什么不只是这个:
lst = [539, 161, 985, 856, 166, 29, 726, 590]
def pendulum(lst):
srt = sorted(lst)
return list(reversed(srt[0::2])) + srt[1::2]
ret = pendulum(lst)
# [856, 590, 166, 29, 161, 539, 726, 985]
对列表进行排序,然后取其他元素并将其组合到新列表中
注意,函数接受列表并返回一个列表;您可能需要首先将字符串拆分为一个列表lst=[inti for i in input.split],然后您可能希望在末尾转换结果:strg=''.joinstri for i in ret
在您的代码中,如果n=8,您将得到mid=3;我将从1到3不等,因此是中间+1
修改了你的代码。它起作用了
您编写的代码将在mid+i位置添加最后一个元素
这里
i=从1到中间+1位置的迭代也将与中间=lenarr-1/2相同
对于偶数长度的数组,假设[5,4,3,1,2,6]
arr[mid+i]=最后一个位置
所以对于偶数长度的数组,只需将+1添加到索引位置,这将给出最后一个位置
t=int(input())
for x in range(t):
l=list(map(int,input().split()))
l.sort()
n=len(l)
j=[None]*n
c=1
if(n%2!=0):
c=1
d=1
z=(n//2)
j[z]=l[0]
for k in range(2,n+1,2):
j[z-d]=l[k]
d+=1
for k in range(1,n,2):
j[z+c]=l[k]
c+=1
else:
c=1
d=1
z=((n//2)-1)
j[z]=l[0]
for k in range(2,n,2):
j[z-d]=l[k]
d+=1
for k in range(1,n,2):
j[z+c]=l[k]
c+=1
print(j)
修改了你的代码。它起作用了
您编写的代码将在mid+i位置添加最后一个元素
这里
i=从1到中间+1位置的迭代也将与中间=lenarr-1/2相同
对于偶数长度的数组,假设[5,4,3,1,2,6]
arr[mid+i]=最后一个位置
因此,对于偶数长度的数组,只需将+1添加到索引位置,这将为您提供最后一个位置。欢迎使用StackOverflow。您是否在寻找更好的解决方案,如当前的答案?或者你真的想知道你的代码有什么问题吗?欢迎来到StackOverflow。您是否在寻找更好的解决方案,如当前的答案?或者你真的想知道你的代码有什么问题吗?谢谢你的解决方案。但是如果您能告诉我给定的代码有什么问题,那将非常有帮助。谢谢您提供的解决方案。但是如果你能告诉我给定的代码有什么问题,那将非常有帮助。请在你的答案中添加一些细节,解释你的代码是如何解决问题的。这将有助于其他人在回答中添加一些细节,以解释代码如何解决问题。这将有助于其他人
t=int(input())
for x in range(t):
l=list(map(int,input().split()))
l.sort()
n=len(l)
j=[None]*n
c=1
if(n%2!=0):
c=1
d=1
z=(n//2)
j[z]=l[0]
for k in range(2,n+1,2):
j[z-d]=l[k]
d+=1
for k in range(1,n,2):
j[z+c]=l[k]
c+=1
else:
c=1
d=1
z=((n//2)-1)
j[z]=l[0]
for k in range(2,n,2):
j[z-d]=l[k]
d+=1
for k in range(1,n,2):
j[z+c]=l[k]
c+=1
print(j)
t=int(input())
for x in range(t):
l=list(map(int,input().split()))
l.sort()
n=len(l)
j=[None]*n
c=1
if(n%2!=0):
c=1
d=1
z=(n//2)
j[z]=l[0]
for k in range(2,n+1,2):
j[z-d]=l[k]
d+=1
for k in range(1,n,2):
j[z+c]=l[k]
c+=1
else:
c=1
d=1
z=((n//2)-1)
j[z]=l[0]
for k in range(2,n,2):
j[z-d]=l[k]
d+=1
for k in range(1,n,2):
j[z+c]=l[k]
c+=1
print(j)