在 Python 中查詢購買所有 N 個糖果的最小和最大金額
假設有一家糖果店,出售 N 種不同型別的糖果,並且所有 N 種不同型別糖果的價格都已給出。該商店還提供一項有吸引力的優惠。根據此優惠,我們可以從商店購買一件糖果,並最多免費獲得 K 種其他不同型別的糖果。我們必須找到購買所有 N 種不同型別糖果所需的最低金額。我們還必須找到購買所有 N 種不同型別糖果所需的最大金額。在這兩種情況下,我們都必須利用優惠並獲得儘可能多的糖果。如果有 k 個或更多糖果可用,我們必須為每次購買糖果選擇 k 個糖果。但是,如果可用糖果少於 k 個,則我們必須為每次購買糖果選擇所有糖果。
因此,如果輸入類似於 price = [4, 3, 2, 5] 且 k = 2,則輸出將為 Minimum = 5 且 Maximum = 9。這是因為當 k 為 2 時,如果我們購買一個糖果,我們可以免費獲得最多兩個糖果。在第一種情況下,我們可以購買價格為 2 的糖果,並免費獲得價格為 4 和 5 的糖果,我們也可以購買價格為 3 的糖果,因此最低成本 = 2 + 3 = 5。另一方面,在第二種情況下,我們購買價格為 5 的糖果,並免費獲得價格為 2 和 3 的糖果,或者我們也可以購買價格為 4 的糖果。因此,最大成本 = 4 + 5 = 9。
要解決此問題,我們將遵循以下步驟:
定義一個函式 get_min()。這將接收 A、k。
n := A 的大小
對列表 A 進行排序
res := 0,i:= 0
當 n 不為零時,執行以下操作:
res := res + A[i]
n := n-k
i := i + 1
返回 res
定義一個函式 get_max()。這將接收 A、k。
n := A 的大小
對列表 A 進行排序
res := 0,idx := 0
i:= n-1
當 i>=idx 時,執行以下操作:
res := res + A[i]
idx := idx + k
i := i - 1
返回 res
從主方法呼叫這兩個函式以獲取結果
get_min(A, k)
get_max(A, k)
示例
讓我們看看以下實現以更好地理解:
def get_min(A,k): n = len(A) A.sort() res = 0 i=0 while(n): res += A[i] n = n-k i += 1 return res def get_max(A, k): n = len(A) A.sort() res = 0 idx = 0 i=n-1 while(i>=idx): res += A[i] idx += k i -= 1 return res A = [4, 3, 2, 5] k = 2 print(get_min(A, k),get_max(A, k))
輸入
[4, 3, 2, 5], 2
輸出
5 9