C ++の配列の最大積4倍(サイズ4のサブシーケンス)
この問題では、配列arr[]が与えられます。私たちのタスクは、C ++の配列で最大積の4倍(サイズ4のサブシーケンス)を見つけるプログラムを作成することです。
コードの説明 −ここでは、すべての要素の積が最大になるように、4つ(サイズ4のサブシーケンス)を見つける必要があります。
問題を理解するために例を見てみましょう
入力
arr[] = {4, -2, 5, -6, 8} 出力
840
説明
製品840の4つ組(-3、5、-7、8)。
ソリューションアプローチ
特定の問題には複数の解決策があります。
簡単な解決策の1つは、配列をトラバースすることによる直接法を使用することです。次に、配列内のすべての可能な4倍を見つけます。彼らの製品を見つけ、それを比較して最大の製品の4倍を見つけます。
ソリューションの動作を説明するプログラム
例
#include <iostream>
using namespace std;
int max(int a, int b){
if(a > b)
return a;
return b;
}
int findMaxProdQuad(int arr[], int n){
int maxProd = 0;
int prod = 1;
for (int i = 0; i <= n - 4; i++)
for (int j = i + 1; j <= n - 3; j++)
for (int k = j + 1; k <= n - 2; k++)
for (int l = k + 1; l <= n - 1; l++) {
prod = arr[i] * arr[j] * arr[k] * arr[l];
maxProd = max(maxProd, prod);
prod = 1;
}
return maxProd;
}
int main(){
int arr[] = {4, -2, 5, -6, 8};
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"Maximum product of quadruple is "<<findMaxProdQuad(arr, n);
return 0;
} 出力
Maximum product of quadruple is 480
最大積の4倍を見つける別の方法は、配列の4つの最大要素と配列の4つの最小要素を見つけることです。
mx1、mx2、mx3、mx4が最初の4つの最大数であるとしましょう。また、mn1、mn2、mn3、mn4は、配列の最初の4つの最小数です。次に、
の値を見つけます1. mx1 * mx2 * mx3 * mx4 2. mn1 * mn2 * mn3 * mn4 3. mx1 * mx2 * mn1 * mn2
そして、これら3つの製品値の最大値を返します。これにより、最大の製品が4倍になります。そして、すべてのケースが考慮されます。
アルゴリズムの実装を示すプログラム
例
#include <iostream>
using namespace std;
int max(int a, int b){
if(a > b)
return a;
return b;
}
int findMaxProdQuad(int arr[], int n) {
int mx1 = -1000, mx2 = -1000, mx3 = -10000, mx4 = -1000;
int mn1 = 1000, mn2 = 1000, mn3 = 1000, mn4 = 1000;
for (int i = 0; i < n; i++) {
if(arr[i] < mn1){
mn4 = mn3;
mn3 = mn2;
mn2 = mn1;
mn1 = arr[i];
}
else if(arr[i] < mn2){
mn4 = mn3;
mn3 = mn2;
mn2 = arr[i];
}
else if(arr[i] < mn3){
mn4 = mn3;
mn3 = arr[i];
}
else if(arr[i] < mn4){
mn4 = arr[i];
}
if(arr[i] > mx1){
mx4 = mx3;
mx3 = mx2;
mx2 = mx1;
mx1 = arr[i];
}
else if(arr[i] > mx2){
mx4 = mx3;
mx3 = mx2;
mx2 = arr[i];
}
else if(arr[i] > mx3){
mx4 = mx3;
mx3 = arr[i];
}
else if(arr[i] > mx4){
mx4 = arr[i];
}
}
int maxVal = max ((mx1 * mx2 * mx3 * mx4), (mn1 * mn2 * mn3 * mn4));
maxVal = max(maxVal, (mx1 * mx2 * mn1 * mn2));
return maxVal;
}
int main() {
int arr[] = {4, -2, 5, -6, 8};
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"Maximum product of quadruple is "<<findMaxProdQuad(arr, n);
return 0;
} 出力
Maximum product of quadruple is 480
もう1つのアプローチは、配列をソートすることです。次に、4つの最大値と4つの最小値が、それぞれアレイの終了と開始になります。次に、最大値と最小値の3つの組み合わせの最大値を見つけて、上記のソリューションのように解きます。
私たちのアプローチの実装を示すプログラム
例
#include <bits/stdc++.h>
using namespace std;
int findMaxProdQuad(int arr[], int n){
sort(arr, arr + n);
int maxVal = max((arr[n-1] * arr[n-2] * arr[n-3] * arr[n-4]), (arr[0] *
arr[1] * arr[2] * arr[3]));
maxVal = max(maxVal, (arr[n-1] * arr[n-2] * arr[0] * arr[1]));
return maxVal;
}
int main(){
int arr[] = {4, -2, 5, -6, 8};
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"Maximum product of quadruple is "<<findMaxProdQuad(arr, n);
return 0;
} 出力
Maximum product of quadruple is 480
-
C++の配列内のすべての素数の積
いくつかの要素を持つ整数配列arr[]が与えられた場合、タスクはその数のすべての素数の積を見つけることです。 素数は、1で割った数、またはその数自体です。または、素数は、1とその数自体を除いて他の数で割り切れない数です。 1、2、3、5、7、11など 与えられた配列の解を見つける必要があります- 入力 −arr [] ={11、20、31、4、5、6、70} 出力 − 1705 説明 −配列の素数は− 11、31、5であり、それらの積は1705 入力 − arr [] ={1、2、3、4、5、6、7} 出力 − 210 説明 −配列の素数は− 1、2、3、5、7
-
STLを使用したC++の配列製品
これは、配列製品を見つけるためのC++プログラムの例です。 アルゴリズム Begin Initialize the values of array. Call used defined function accumulate to return the product of array. Print the solution. End. サンプルコード #include <iostream> #include <numeric> using namespace std; int ProductOfArray(int p[], int n) { &nbs