[英]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
范圍是1
到3
,因此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.