C++程式查詢塔的最小可能醜陋度


假設我們有一個包含 n 個元素的陣列 A。考慮一行中有 n 座積木塔。第 i 座塔的高度為 A[i]。在一天內,我們可以執行以下操作:選擇兩個索引 i 和 j(i != j)並將積木從塔 i 移到塔 j。這將使 A[i] 減 1 並使 A[j] 加 1。建築物的醜陋度為 max(A) - min(A)。我們必須找到可以達到的最小可能醜陋度。

因此,如果輸入類似於 A = [1, 2, 3, 1, 5],則輸出將為 1,因為我們可以對 i=2 和 j=0 執行三次操作,新的陣列現在將為 [2,2,2,1,5],然後對於 i = 4 和 j = 3,陣列將為 [2,2,2,2,4],對於 i = 4 和 j = 2,陣列為 [2,2,3,2,3]。

步驟

為了解決這個問題,我們將遵循以下步驟:

sum := 0
x := 0
n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
   sum := sum + A[i]
if sum mod n is same as 0, then:
   return 0
return 1

示例

讓我們看看以下實現以獲得更好的理解:

#include <bits/stdc++.h>
using namespace std;

int solve(vector<int> A) {
   int sum = 0, x = 0;
   int n = A.size();
   for (int i = 0; i < n; i++)
      sum += A[i];
   if (sum % n == 0)
      return 0;
   return 1;
}
int main() {
   vector<int> A = { 1, 2, 3, 1, 5 };
   cout << solve(A) << endl;
}

輸入

{ 1, 2, 3, 1, 5 }

輸出

1

更新於: 2022年3月4日

147 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告