C++で特定の操作を実行した後の配列で可能な最大の積
このチュートリアルでは、特定の操作を実行した後、配列内で可能な最大の製品を見つけるプログラムについて説明します
このために、サイズNの配列が提供されます。私たちのタスクは、N-1操作を実行することです(a[j]→a[i] * a[j]を変更してa[i]値を削除するか、単に値を削除します残りの値が最大値のみになるように、a [i]の(1回のみ))。
例
#include <bits/stdc++.h> using namespace std; //printing operations void MaximumProduct(int a[], int n) { int cntneg = 0; int cntzero = 0; int used[n] = { 0 }; int pos = -1; for (int i = 0; i < n; ++i) { if (a[i] == 0) { used[i] = 1; cntzero++; } if (a[i] < 0) { cntneg++; if (pos == -1 || abs(a[pos]) > abs(a[i])) pos = i; } } if (cntneg % 2 == 1) used[pos] = 1; if (cntzero == n || (cntzero == n - 1 && cntneg == 1)) { for (int i = 0; i < n - 1; ++i) cout << 1 << " " << i + 1 << " " << i + 2 << endl; return; } int lst = -1; for (int i = 0; i < n; ++i) { if (used[i]) { if (lst != -1) cout << 1 << " " << lst + 1 << " " << i + 1 << endl; lst = i; } } if (lst != -1) cout << 2 << " " << lst + 1 << endl; lst = -1; for (int i = 0; i < n; ++i) { if (!used[i]) { if (lst != -1) cout << 1 << " " << lst + 1 << " " << i + 1 << endl; lst = i; } } } int main() { int a[] = { 5, -2, 0, 1, -3 }; int n = sizeof(a) / sizeof(a[0]); MaximumProduct(a, n); return 0; }
出力
2 3 1 1 2 1 2 4 1 4 5
-
| ai + aj –k|の可能な最小値C++で指定された配列とkに対して
問題の説明 n個の整数と整数Kの配列が与えられます。|ai+ aj – k|の絶対値となるような順序付けされていないペアの総数{i、j}を見つけます。 i!=jの場合は最小限に抑えられます。 例 arr [] ={0、4、6、2、4}およびk =7の場合、最小値を1として次の5つのペアを作成できます {0、6}、{4、2}、{4、4}、{6、2}、{2、4} アルゴリズム 可能なすべてのペアを反復処理し、各ペアについて、(ai + aj – K)の値が現在の最小値であるnotよりも小さいかどうかを確認します。したがって、上記の条件の結果として、合計3つのケースがあります- 最小-こ
-
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