C++ 程式碼,在不超出 k 的前提下計算複製操作次數


假設我們有一個包含 n 個元素的陣列 A 和另一個數字 k。有 n 堆糖果。第 i 堆有 A[i] 個糖果。我們可以在兩個索引 i 和 j (i != j) 上執行此操作,然後在 A[i] 中再新增 A[i] 個糖果(A[i] 不會減少)。我們可以執行此操作任意多次,但不幸的是,如果某一堆糖果嚴格超過 k 個,我們則無法再執行此操作。我們必須找出我們可以執行此操作的最多數次。

因此,如果輸入為 A = [1, 2, 3]; k = 5,則輸出將為 5,因為我們可以將 i = 0 視作 j = 1 三次,並視作 j = 2 兩次。因此,總共 5 次。

步驟

要解決此問題,我們將遵循以下步驟:

ans := 0
n := size of A
sort the array A
for initialize i := 1, when i < n, update (increase i by 1), do:
   ans := ans + (k - A[i])
return ans

示例

讓我們看看以下實現以加深理解:

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A, int k){
   int ans = 0;
   int n = A.size();
   sort(A.begin(), A.end());
   for (int i = 1; i < n; i++){
      ans += (k - A[i]) / A[0];
   }
   return ans;
}
int main(){
   vector<int> A = { 1, 2, 3 };
   int k = 5;
   cout << solve(A, k) << endl;
}

輸入

{ 1, 2, 3 }, 5

輸出

5

更新於: 11-Mar-2022

149 次瀏覽

啟動您的 職業生涯

完成課程即可獲得認證

開始
廣告
© . All rights reserved.