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

サブ配列に存在する要素の平均がC++のサブ配列に存在しない要素の平均よりも大きくなるように、サブ配列の数を数えます。


正の整数の配列arr[]が与えられます。目標は、要素の平均が、そこに存在しないarr[]の残りの要素の平均よりも大きいarr[]のサブ配列の数を見つけることです。

入力

arr[ ] = { 3, 2, 4 }

出力

Count of number of sub-arrays such that the average of elements present in
the sub−array is greater than that do not present in the sub−array are: 2

説明

The subarrays are −
[ 3 ], [ 2 ], [ 4 ], [ 3,2 ], [ 2,4 ], [ 3,2,4 ].
Average of [ 4 ] is 4 which is more than the average of [ 2,3 ].
Average of [ 3,2,4 ] is 3 which is more than the average of [ ]
の平均よりも大きいです。

入力

arr[ ] = { 3, 3, 3 }

出力

Count of number of sub−arrays such that the average of elements present in
the sub−array is greater than that do not present in the sub−array are: 1

説明

The subarrays are −
[ 3 ], [ 3 ], [ 3 ], [ 3,3 ], [ 3,3 ], [ 3,3,3 ].
Average of [ 3,3,3 ] is 3 which is more than the average of [ ]
の平均を上回っています

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

このアプローチでは、インデックスiまでの要素の合計をnew_arr[i]に格納するプレフィックス合計配列を作成します。これで、前の要素までの合計が得られ、次にarr [i]までの合計と要素の数をj−i + 1として計算し、平均を計算します。

  • 配列arr[]を入力として受け取ります。

  • 関数count(int arr []、int size)はarr []を取り、サブ配列に存在する要素の平均がサブ配列に存在しない要素の平均よりも大きくなるように、サブ配列の数を返します。

    >
  • 配列new_arr[size]を取得して、前のインデックス要素までの合計を格納します。

  • i =0からi

  • 次に、2つのforループを使用してnew_arr[]をトラバースします。

  • 次に、total_1を前のサブ配列の合計として計算します。そして、その中の要素はcount_1です。

  • total_2を次のサブ配列の合計として計算し、その中の要素をcount_2として計算します。

  • 平均をcheck_1=total_1/count_1;として計算します。およびcheck_2=total_2 / count_2;

  • 平均check_1>check_2の場合、カウントをインクリメントします。

  • forループの最後に、結果としてカウントが返されます。

#include <bits/stdc++.h>
using namespace std;
int count(int arr[], int size){
   int count = 0;
   int new_size = size + 1;
   int new_arr[new_size] = { 0 };
   for (int i = 1; i < new_size; i++){
      new_arr[i] = new_arr[i − 1] + arr[i − 1];
   }
   for (int i = 1; i < new_size; i++){
      for (int j = i; j < new_size; j++){
         int total_1 = new_arr[j] − new_arr[i − 1];
         int count_1 = j − i + 1;
         int total_2 = new_arr[size] − total_1;
         int count_2 = 0;
         if((size − count_1) == 0){
            count_2 = 1;
         } else {
            count_2 = size − count_1;
         }
         int check_1 = total_1 / count_1;
         int check_2 = total_2 / count_2;
         if (check_1 > check_2){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = { 2, 6, 2, 4 };
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of number of sub−arrays such that the average of elements present in
   the sub−array "<< "is greater than that not present in the sub−array are: "<<count(arr, size);
   return 0;
}

出力

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

Count the number of sub−arrays such that the average of elements present in the subarrayis greater than that not present in the sub-array are: 6

  1. サイズKで平均がC++のしきい値以上のサブアレイの数

    整数arrの配列と2つの整数kおよびしきい値があるとします。サイズがkで、平均がしきい値以上のサブ配列の数を見つける必要があります。したがって、入力が[2,2,2,2,5,5,5,8]で、k =3、しきい値=4の場合、出力は3になります。サブ配列[2,5,5] 、[5,5,5]と[5,5,8]の平均はそれぞれ4、5、6です。 これを解決するには、次の手順に従います- sum:=0、div:=kおよびn:=配列内の要素の数 set sum:=arrのすべての要素の合計 ret:=0 i:=0およびjがkからn– 1の範囲にある場合、iとjの両方を1増やします =

  2. C ++で数値のxorがゼロより大きくなるように、すべての行の数値を選択できるかどうかを確認します。

    サイズNxMの2D配列が1つあるとします。タスクは、これらの要素のXORがゼロ以外または0より大きいように、すべての行から数値を選択できるかどうかを確認することです。1つの行列がこのように- 7 7 7 10 10 7 XORを実行すると、2つの行の最後の要素が7と10である場合を除いて、答えはゼロ以外になります。 この問題を解決するための解決策は非常に簡単です。最初に、各行の最初の列の要素のXORが0であるかどうかを確認します。ゼロ以外の場合は可能です。それ以外の場合は、いずれかの行に2つ以上の異なる要素があるかどうかを確認します。ある場合は、それ