C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++ですべての配列要素を等しくするために必要な最小限の操作


問題の説明

n個の正の整数を持つ配列が与えられます。すべての要素を等しくするために、操作の最小数を見つける必要があります。配列要素の任意の要素を使用して、加算、乗算、減算、または除算を実行できます。

入力配列が=1、2、3、4}の場合、すべての要素を等しくするには、最低3つの操作が必要です。たとえば、3つの追加を行うことで要素4を作成できます。

アルゴリズム

1. Select element with maximum frequency. Let us call it ‘x’ 
2. Now we have to perform n-x operations as there are x element with same value

#include <bits/stdc++.h>
using namespace std;
int getMinOperations(int *arr, int n) {
   unordered_map<int, int> hash;
   for (int i = 0;i < n; ++i) {
      hash[arr[i]]++;
   }
int maxFrequency = 0;
   for (auto elem : hash) {
      if (elem.second > maxFrequency) {
         maxFrequency = elem.second;
      }
   }
   return (n - maxFrequency);
}
int main() {
   int arr[] = {1, 2, 3, 4};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Minimum required operations = " <<
   getMinOperations(arr, n) << endl;
   return 0;
}

上記のプログラムをコンパイルして実行する場合。次の出力を生成します:

出力

Minimum required operations = 3

  1. C++で指定された数Kで割り切れる配列内のすべての要素の積

    n個の整数と別の整数kを持つ配列arr[n]が与えられた場合、タスクは、kで割り切れるarr[]のすべての要素の積を見つけることです。 この問題を解決するには、配列のすべての要素を反復処理し、それが数値kで完全に割り切れるかどうかを調べてから、すべての要素を積んで変数に格納する必要があります。配列arr[]={1、2、3、4、5、6}があるように、k =2であると仮定すると、2で割り切れる配列内の数は2、4、6であり、それらの積は48に等しい。 それでは、入力に従ってどのように回答が必要かという例を見てみましょう 入力 arr[] = {10, 11, 55, 2, 6, 7} K =

  2. C++の無向グラフの連結成分すべての最小要素の合計

    この問題では、arr [i]が(i + 1)番目のノードを表すN個の数値の配列arrが与えられます。また、エッジのMペアがあり、uとvはエッジによって接続されたノードを表します。私たちのタスクは、無向グラフのすべての連結成分の最小要素の合計を見つけるプログラムを作成することです。ノードが他のノードに接続されていない場合は、1つのノードを持つコンポーネントとしてカウントします。 問題を理解するために例を見てみましょう 入力 arr[] = {2, 7, 5, 1, 2} m = 2 1 2 4 5 出力 8 説明 以下は上に描かれたグラフです- 2つの接続されたノードと1