簡體   English   中英

在Python中以擺式排列打印數組

[英]Print array in pendulum arrangement in python

我應該以擺的方式打印數組。 對於某些輸出,我的回答是正確的,但對於某些錯誤。 為什么會這樣呢?

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范圍是13 ,因此mid+1 <= 6 您將永遠不會設置arr1[7] -如果您輸入的長度為偶數,則數組中的最后一項將保持為0

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 + 1] = arr[j]

    print(' '.join(map(str, arr1)))

修改了您的代碼。 有用

您編寫的代碼將在此處的“ mid + i”位置添加最后一個元素

 middle = (len(arr)-1)/2

i = (從1到1的中間位置迭代)也將與mid = (len(arr)-1)/2

對於數組的偶數長度,假設[5,4,3,1,2,6]

mid = 2
i = 2
mid+i = 4

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM