我一直在為以下問題撰寫 python 代碼,任何人都可以幫助找到代碼問題,非常感謝。
串列縮減:
給定一個大小為 N 的整數 L 和一個整數 K 的串列。 您最多可以對串列執行以下操作 k 次:
- 選擇串列中的任意兩個元素。
- 將任何元素乘以 2。
- 將另一個元素除以 2,如果元素為奇數,則取上限。
注意:在這樣的操作之后,串列會發生變化,更改后的串列將在后續操作中使用。
在執行最多 k 個這樣的操作后,您需要最小化串列中所有元素的總和。
輸入格式:
- 如上所述,第一行包含 NK。
- 第二行包含 N 個空格分隔的整數,最初表示串列,
輸出格式:
在最多執行 k 次操作后,在最后列印串列中所有元素的最小可能總和。
代碼:
def solve (X, arr):
Sum = 0
largestDivisible, minimum = -1, arr[0]
for i in range(0,N):
Sum = arr[i]
if(arr[i]%X == 0 and largestDivisible < arr[i]):
largestDivisible = arr[i]
if arr[i] < minimum:
minimum = arr[i]
if largestDivisible == -1:
return Sum
sumAfterOperation = (Sum-minimum-largestDivisible (X*minimum) (largestDivisible//X))
return min(Sum,sumAfterOperation)
N=5
X =2
#map(int, input().split())
arr = [10, 7, 4, 2, 1]
#list(map(int, input().split()))
out_ = solve(X, arr)
print (out_)
output: 20
預期輸出:19
uj5u.com熱心網友回復:
不是最優方案。
想法:乘以最小元素并除以最大元素給出總和最小的序列。你想處理負數嗎?K 是否取負值?
K = int(input())
arr = list(map(int, input().split()))
for _ in range(K):
arr.sort()
arr[0] *= 2
arr[-1] = arr[-1] // 2 arr[-1] % 2
print(sum(arr))
更有效的解決方案。
K = int(input())
arr = list(map(int, input().split()))
for _ in range(K):
mn, mx = min(arr), max(arr)
mn_i = arr.index(mn)
if mn != mx:
mx_i = arr.index(mx)
else:
mx_i = arr.index(mx, mn_i 1)
arr[mn_i] *= 2
arr[mx_i] = arr[mx_i] // 2 arr[mx_i] % 2
print(sum(arr))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/388304.html
上一篇:使用串列中的標簽將numpy陣列轉換為Pandas資料框
下一篇:串列和字典的串列列
