仅在C ++中使用数组元素均衡数组

在这个问题中,我们得到了n个元素的数组。我们的任务是创建一个程序来计算仅使用元素来均衡数组的操作数。

我们需要计算将使数组中所有元素相等的加法或减法运算的数量。

让我们举个例子来了解这个问题,

输入:  arr [] = {4,0,3,1,2}

输出 3

解释: 

等于2。

总数将是相同的。我们将从arr [3]的值中获取1,然后将其与arr [1]的值相加。

然后,我们将从arr [0]的值中取2并将其添加到arr [1]的值中。

解决方法:

解决该问题的一种简单方法是,从数组中查找要被视为与数组相等的元素的元素。

我们将通过找到平均值来检查该运算是否可行,如果该整数是整数,则均衡是可能的,否则不可能。

如果可以进行均衡,则将找到所需的操作数计数,然后将其返回。运算次数等于所有数字的绝对差与平均值之和的一半。

算法 :

步骤1: 找出阵列中所有元素的平均值。

步骤2: 如果平均值不是整数,则返回-1,表示不可能进行均衡。

步骤3: 否则,找出所有元素与平均值之间的绝对差。

步骤4: 返回平均值的一半。

该程序说明了我们解决方案的工作原理,

示例

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

int calcEqualisedOperations(int arr[], int n) {
   
   int sum = 0, average, operations = 0;
   for (int i = 0; i < n; i++)
      sum += arr[i];
   if (sum % n != 0)
      return -1;
   average = sum/n;
   for (int i = 0; i < n; i++)
      operations += ( abs(arr[i] - average) / 2 );

   return operations;
}

int main() {

   int arr[] = { 5, 3, 2, 6 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"使用数组元素均衡数组所需的操作是 "<<calcEqualisedOperations(arr, n);
   return 0;
}

输出-

使用数组元素均衡数组所需的操作是 2