仅在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