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

C++で積が​​K未満のすべてのサブシーケンスをカウントします


このチュートリアルでは、積がK未満のサブシーケンスの数を見つけるプログラムについて説明します。

このために、非負の配列と値kが提供されます。私たちのタスクは、積がk未満の配列内のすべてのサブシーケンスを見つけることです。

#include <bits/stdc++.h>
using namespace std;
//counting subsequences with product
//less than k
int count_sub(vector<int> &arr, int k){
   int n = arr.size();
   int dp[k + 1][n + 1];
   memset(dp, 0, sizeof(dp));
   for (int i = 1; i <= k; i++) {
      for (int j = 1; j <= n; j++) {
         dp[i][j] = dp[i][j - 1];
         if (arr[j - 1] <= i && arr[j - 1] > 0)
            dp[i][j] += dp[i/arr[j-1]][j-1] + 1;
      }
   }
   return dp[k][n];
}
int main(){
   vector<int> A;
   A.push_back(1);
   A.push_back(2);
   A.push_back(3);
   A.push_back(4);
   int k = 10;
   cout << count_sub(A, k) << endl;
}

出力

11

  1. C++の配列内のすべての素数の積

    いくつかの要素を持つ整数配列arr[]が与えられた場合、タスクはその数のすべての素数の積を見つけることです。 素数は、1で割った数、またはその数自体です。または、素数は、1とその数自体を除いて他の数で割り切れない数です。 1、2、3、5、7、11など 与えられた配列の解を見つける必要があります- 入力 −arr [] ={11、20、31、4、5、6、70} 出力 − 1705 説明 −配列の素数は− 11、31、5であり、それらの積は1705 入力 − arr [] ={1、2、3、4、5、6、7} 出力 − 210 説明 −配列の素数は− 1、2、3、5、7

  2. C++の最小ヒープの値x未満のすべてのノードを出力します

    この問題では、最小ヒープが与えられます および値x x未満のすべてのノードを印刷する必要があります。 最小ヒープ は、すべてのノードの値が子ノードのノード値よりも小さい特殊なタイプの二分木です。 問題を理解するために例を見てみましょう- X =45 出力- 2 4 7 10 17 22 33 34 ここで、この問題を解決するには、最小ヒープ全体のプレオーダートラバーサルを実行し、指定された値X未満の値のみを出力する必要があります。ノードの値がxより大きい場合、トラバースは行われません。そこの子ノードの値はxより大きくなります。最小ヒープのプレオーダートラバーサルを実行す