C ++
 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

  1. ヒープソートアルゴリズムを使用して10個の要素の配列をソートするC++プログラム

    ヒープソートは、バイナリヒープデータ構造に基づいています。バイナリヒープでは、親ノードの子ノードは最大ヒープの場合はそれ以下であり、親ノードの子ノードは最小ヒープの場合はそれ以上です。 ヒープソートのすべてのステップを説明する例は次のとおりです。 並べ替え前の10個の要素を含む元の配列は-です 20 7 1 54 10 15 90 23 77 25 この配列は、max-heapifyを使用してバイナリ最大ヒープに組み込まれています。配列として表されるこの最大ヒープは、次のように与えられます。 90 77 20 54

  2. ポインタを使用して配列の要素にアクセスするC++プログラム

    ポインタは、変数のメモリ位置またはアドレスを格納します。つまり、ポインタはメモリ位置を参照し、そのメモリ位置に格納されている値を取得することは、ポインタの逆参照と呼ばれます。 ポインタを使用して配列の単一の要素にアクセスするプログラムは、次のようになります- 例 #include <iostream> using namespace std; int main() {    int arr[5] = {5, 2, 9, 4, 1};    int *ptr = &arr[2];    cout<<&q