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

合計がkで割り切れるすべてのサブ配列をカウントします


このチュートリアルでは、合計がkで割り切れるサブ配列の数を見つけるプログラムについて説明します。

このために、配列と値kが提供されます。私たちのタスクは、合計が指定された値kに等しいサブ配列の数を見つけることです。

#include <bits/stdc++.h>
using namespace std;
//counting subarrays with k sum
int count_subarray(int arr[], int n, int k){
   int mod[k];
   memset(mod, 0, sizeof(mod));
   int cumSum = 0;
   for (int i = 0; i < n; i++) {
      cumSum += arr[i];
      //taking modulus to get positive sum
      mod[((cumSum % k) + k) % k]++;
   }
   int result = 0;
   for (int i = 0; i < k; i++)
      if (mod[i] > 1)
         result += (mod[i] * (mod[i] - 1)) / 2;
   result += mod[0];
   return result;
}
int main(){
   int arr[] = { 4, 5, 0, -2, -3, 1 };
   int k = 5;
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << count_subarray(arr, n, k) << endl;
   int arr1[] = { 4, 5, 0, -12, -23, 1 };
   nt k1 = 5;
   int n1 = sizeof(arr1) / sizeof(arr1[0]);
   cout << count_subarray(arr1, n1, k1) << endl;
   return 0;
}

出力

7
7

  1. C++で増加するすべてのサブシーケンスをカウントします

    このチュートリアルでは、増加するシーケンスの数を見つけるためのプログラムについて説明します。 このために、0から9までの数字を含む配列が提供されます。私たちのタスクは、次の要素が前の要素よりも大きくなるように、配列に存在するすべてのシーケンスをカウントすることです。 例 #include<bits/stdc++.h> using namespace std; //counting the possible subsequences int count_sequence(int arr[], int n){    int count[10] = {0}; &nb

  2. C++のすべてのサブシーケンスの合計を求めます

    n個の要素を持つ配列Aがあるとします。配列のすべてのサブセットの合計の合計を見つける必要があります。したがって、配列がA =[5、6、8]の場合、-のようになります。 サブセット 合計 5 5 6 6 8 8 5,6 11 6,8 14 5,8 13 5,6,8 19 合計 76 配列にはn個の要素があるため、2n個のサブセット(空を含む)があります。はっきりと観察すると、各要素が2n〜1回発生していることがわかります 例 #include<iostream> #includ