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

C++で指定された操作で配列の合計を最大化する


説明

(2 * n – 1)個の整数の配列があります。配列内の正確にn個の要素の符号を変更できます。つまり、正確にn個の配列要素を選択し、それぞれに-1を掛けることができます。配列の最大合計を求めます。

入力配列が{-2、100、-3}の場合、-2と-3の最大変化符号を取得できます。符号配列を変更すると、-

になります

{2、100、3}であり、この配列の最大合計は105です。

アルゴリズム

  • 負の数を数える
  • 数値の絶対値を使用して、配列の合計を計算します。
  • 数値の絶対値を取得して、配列の最小数を見つけます
  • いいえかどうかを確認します。負の数の数は奇数であり、nの値は偶数であり、合計からmを2倍減算します。これは配列の最大合計になります。それ以外の場合、合計の値は配列の最大合計になります。
  • 上記の手順を(2 * n – 1)回繰り返します

例を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
int getMaxSum(int *arr, int n) {
   int negtiveCnt = 0;
   int sum = 0;
   int m = INT_MAX;
   for (int i = 0; i < 2 * n - 1; ++i) {
      if (arr[i] < 0) {
         ++negtiveCnt;
      }
      sum = sum + abs(arr[i]);
      m = min(m, abs(arr[i]));
   }
   if (negtiveCnt % 2 && n % 2 == 0) {
      sum = sum - 2 * m;
      return sum;
   }
   return sum;
}
int main() {
   int arr[] = {-2, 100, -3};
   int n = 2;
   cout << "Maximum sum = " << getMaxSum(arr, n) << endl;
   return 0;
}

出力

Maximum sum = 105

  1. C ++の絶対差の合計が最小の配列要素?

    このプログラムは、明確な要素を持つ配列がある場合に、配列の最小絶対差を見つけることです。この概念をよりよく学ぶために、必要なものを再ブラシします。 配列 同じデータ型の要素のコンテナです。配列の長さを事前に定義する必要があります。 絶対差 は、2つの数値の差の絶対値です。つまり、差は常に正であり、負の値は正に変換されます。 各元素の最小絶対差の合計を求める必要があります。最小絶対溶質差の式は次のとおりです。 最小絶対差(a)=min(abs(a – arr [j])); ここで、1 <=j <=nおよびj!=i、 abs は絶対値です。 Input: arr = {1, 3,

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

    配列 同じデータ型の複数の要素を格納するデータ構造です。値のセット全体を一度に保存できます。ただし、その長さは事前に定義する必要があります。 この合計配列パズルでは、nと言う明確なサイズの配列A1が与えられます。このパズルを解くために、位置が使用されている要素を除く配列のすべての要素の合計を格納するS1という配列を作成します。たとえば、S1 [3]が計算されている場合、位置4の要素を除くA1のすべての要素の合計が求められます。 例- Array A1 = {1,2,3,4,6} Output S1 = {15,14,13,12,10} 説明 −合計配列を計算するには、初期配列の各要素を合計