Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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<<"Operations required to equalize an array using array elements is "<<calcEqualisedOperations(arr, n);
   return 0;
}

출력 -

Operations required to equalize an array using array elements is 2