Skip to main content
 首页 » 编程设计

python之在python中以钟摆排列打印数组

2025年05月04日13Free-Thinker

我应该打印钟摆排列的数组。对于某些输出,我的回答是正确的,但对于某些输出是错误的。为什么会这样?

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))) 

这里我尝试了 2 个测试用例。对于第一个测试用例,我的输出是正确的,但对于第二个测试用例,一个大小为 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 = [int(i) for i in input().split()] ),您可能希望在最后转换结果: strg = ' '.join(str(i) for i in ret) .


在你的代码中如果n = 8你会得到mid = 3 ; i范围从 1至 3因此 mid+1 <= 6 ;你永远不会设置 arr1[7] - 数组中的最后一个条目将保留为 0如果你输入的长度是偶数。