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

C++プログラムの2つの配列の積の最大合計


この問題では、サイズnの2つの配列arr1[]とarr2[]が与えられます。私たちのタスクは、2つの配列の積の最大合計を見つけるプログラムを作成することです。

問題の説明 −2つの配列の積の最大合計を見つける必要があります。 arr1の1つの要素とarr2のその他の要素の積の最大合計を見つける必要があります。

問題を理解するために例を見てみましょう

入力

arr1[] = {3, 5, 6} arr2[] = {1, 4, 2}

出力

37

説明

Maximum sum of products: 6*4 + 5*2 + 3*1 = 24 + 10 + 3 = 37

ソリューションアプローチ

この問題の簡単な解決策は、arr1とarr2の要素のすべてのペアを見つけることです。そして、最大合計を返します。

この問題の効率的な解決策は、両方の配列の最大値を乗算することです。これを行う簡単な方法は、配列を降順で並べ替えることです。次に、両方の配列のすべての要素をインデックス0トンから乗算し、それらの合計を返します。

ソリューションの動作を説明するプログラム

#include<bits/stdc++.h>
using namespace std;
int calcMaxSumOfProd(int arr1[], int arr2[], int n){
   int maxSum = 0;
   sort(arr1, arr1 + n, greater<int>());
   sort(arr2, arr2 + n, greater<int>());
   for (int i = 0; i < n; i++)
   maxSum += (arr1[i] * arr2[i]);
   return maxSum;
}
int main() {
   int arr1[] = { 3, 5, 6 };
   int arr2[] = { 1, 4, 2 };
   int n = sizeof(arr1)/sizeof(arr1[0]);
   cout<<"The maximum Sum of Products of two arrays is "<<calcMaxSumOfProd(arr1, arr2, n);
   return 0;
}

出力

The maximum Sum of Products of two arrays is 37

  1. C++で2つの要素が隣接しないような循環配列の最大合計

    この問題では、循環配列cirArr[]が与えられます。私たちのタスクは、C++で2つの要素が隣接しないように循環配列の最大合計を見つけるプログラムを作成することです。 問題の説明 循環配列の場合、隣接する要素を取得できないように、配列の要素の最大合計を見つける必要があります。つまり、代替要素を取得する必要があります。 循環アレイ は、配列の最後の要素が最初の要素に接続されている特殊なタイプの配列です。 問題を理解するために例を見てみましょう 入力 cirArr[] = {4, 1, 5, 3, 2} 出力 9 説明 最大合計循環サブシーケンスは[4、5、2]です。合計=9 ソリ

  2. C ++の合計配列パズル?

    ここでは、配列に関連する1つの興味深い問題を確認します。 n個の要素を持つ配列があります。 n個の要素の別の配列を作成する必要があります。ただし、2番目の配列のi番目の位置は、i番目の要素を除く最初の配列のすべての要素の合計を保持します。そして、1つの制約は、この問題では減算演算子を使用できないことです。 減算演算を使用できれば、すべての要素の合計を取得し、最初の配列のi番目の要素を減算して、2番目の配列のi番目の場所に格納することで、この問題を簡単に解決できます。 ここでは、毎回要素を追加することでこれを解決し、0..n-1のiについては、位置iの要素を無視します。ポイントを得るためのア