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

C++で指定された範囲の要素の合計を使用してsum-arrayを作成します


整数のみと奇数の合計を含む配列arr[]が与えられます。目標は、各arr_2[i]がarr[]の前のsum/2要素+arr[i]+次のsum/2要素の合計であるような合計配列arr_2[]を作成することです。合計が1の場合、arr_2 [i] =arr [i]

入力

arr[] = { 4, 1, 7, 5, 2, 9} sum=3

出力

Construction of sum-array with sum of elements in given range are: 5 12 13 14
16 17 17 9 3

説明

The sum array is constructed as:
arr_2[0]=arr[0]+arr[1] = 4+1 = 5
arr_2[1]=arr[0]+arr[1]+arr[2] = 4+1+7 = 12
arr_2[2]=arr[1]+arr[2]+arr[3] = 1+7+5 = 13
arr_2[3]=arr[2]+arr[3]+arr[4] = 7+5+2 = 14
arr_2[4]=arr[3]+arr[4]+arr[5] = 5+2+9 = 16
arr_2[5]=arr[4]+arr[5] = 2+9 = 11s

入力

arr[] = { 1,2,3,4,5 } sum=5

出力

Construction of sum-array with sum of elements in given range are − 6 10 15 14
12

説明

The sum array is constructed as:
arr_2[0]=arr[0]+arr[1]+arr[2] = 1+2+3 = 6
arr_2[1]=arr[0]+arr[1]+arr[2]+arr[3] = 1+2+3+4= 10
arr_2[2]=arr[0]+arr[1]+arr[2]+arr[3]+arr[4] = 1+2+3+4+5 = 15
arr_2[3]=arr[1]+arr[2]+arr[3]+arr[4] = 2+3+4+5= 14
arr_2[4]=arr[2]+arr[3]+arr[4]= 3+4+5 = 12

以下のプログラムで使用されるアプローチは次のとおりです

このアプローチでは、スライディングウィンドウの概念を使用します。前のウィンドウの合計に次の右端の要素を追加し、そこから左端の要素を削除します。

  • 整数配列arr[]と値の合計を入力として受け取ります。

  • 関数sum_array(int arr []、int size、int sum)は、指定された範囲内の要素の合計を含む合計配列を返します。

  • 初期カウントを0とします。

  • 合計配列をarr_2[size]とします。

  • temp =sum / 2+1を取ります。

  • カウントするtempに0からtempまでの要素の一時的な数を追加します。そして、arr_2[0]をカウントとして設定します。

  • 合計配列の次の要素については、forループを使用してi=1からiまでトラバースします。

  • temp_1 =i −(sum / 2)−1を取ります。それが>=0の場合、カウントからarr[temp_1]を引きます。

  • temp_2 =i +(sum / 2)を取ります。 <サイズの場合は、arr[temp_2]を追加してカウントします。

  • arr_2 [i]=countを設定します。

  • forループの最後に、合計配列としてarr_2[]があります。

  • forループを使用して合計配列arr_2[]を出力します。

#include <bits/stdc++.h>
using namespace std;
void sum_array(int arr[], int size, int sum){
   int count = 0;
   int arr_2[size];
   int temp = sum / 2 + 1;
   for (int i = 0; i < temp; i++){
      count = count + arr[i];
   }
   arr_2[0] = count;
   for (int i = 1; i < size; i++){
      int temp_1 = i − (sum / 2) − 1;
      if (temp_1 >= 0){
         count = count − arr[temp_1];
      }
      int temp_2 = i + (sum / 2);
      if (temp_2 < size){
         count = count + arr[temp_2];
      }
      arr_2[i] = count;
   }
   cout<<"Construction of sum−array with sum of elements in given range are: ";
   for (int i = 0; i < size; i++){
      cout<< arr_2[i] << " ";
   }
}
int main(){
   int arr[] = { 4, 1, 7, 5, 2, 9, 6, 2, 1 };
   int sum = 3;
   int size = sizeof(arr) / sizeof(int);
   sum_array(arr, size, sum);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Construction of sum-array with sum of elements in given range are − 5 12 13 14 16 17 17 9 3

  1. C++で指定された合計ですべてのペアを印刷します

    この問題では、整数の配列と整数の合計が与えられ、合計が合計値に等しい整数のすべてのペアを出力する必要があります。 問題を理解するために例を見てみましょう: 入力- 配列={1、6、-2、3}合計=4 出力- (1、3)、(6、-2) ここでは、指定された合計値のペアが必要です。 問​​題の簡単な解決策は、合計を生成する要素のペアをチェックすることです。これは、配列をトラバースして、合計値となる配列内の数値を見つけることで実行できます。 例 このプログラムは解決策を説明します- #include <iostream> using namespace std; int prin

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

    説明 (2 * n – 1)個の整数の配列があります。配列内の正確にn個の要素の符号を変更できます。つまり、正確にn個の配列要素を選択し、それぞれに-1を掛けることができます。配列の最大合計を求めます。 例 入力配列が{-2、100、-3}の場合、-2と-3の最大変化符号を取得できます。符号配列を変更すると、-になります {2、100、3}であり、この配列の最大合計は105です。 アルゴリズム 負の数を数える 数値の絶対値を使用して、配列の合計を計算します。 数値の絶対値を取得して、配列の最小数を見つけます いいえかどうかを確認します。負の数の数は奇数であり、nの値は偶数であり、合計か