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 次查看

开启您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.