C++で最小の製品トリプレットを形成する方法を数える
これを行うには、最初に(i
例を挙げて理解しましょう。
入力 − arr [] ={1,2,3,2,4,1,5}
出力 −トリプレットの数− 2
説明 −
Here minimum product is 2 Triplet 1[ 1,2,3,2,4,1,5 ] → (1,2,1) product=2 Triplet 2 [ 1,2,3,2,4,1,5 ] → (1,2,1) product=2 Number of triplets with product 2 which is minimum is 2.
入力 − arr [] ={1,1,2,1,2,2}
出力 −トリプレットの数− 1
説明 −
Here minimum product is 1 Triplet 1 [ 1,1,2,1,2,2 ] → (1,1,1) product=1 Number of triplets with product 1 which is minimum is 1.
以下のプログラムで使用されているアプローチは次のとおりです
-
乱数で初期化された整数配列Arr[]を使用します。
-
Arr[]の長さを格納する変数Nを取ります。
-
関数countTriplets(int arr []、int n)は配列を受け取り、その長さを入力として受け取り、積が最小積に等しいトリプレットを返します。
-
トリプレットの数として、初期変数カウントを0とします。
-
各トリプレットの積として初期変数prodを取ります。最初は1。
-
すべてのトリプレットの可能な最小の積として、初期変数minprodを取ります。最初は999です。
-
トリプレットの各要素に対して3つのforループを使用して配列をトラバースします。
-
0 <=i
-
prod =arr [i] * arr [j] *arr[k]を計算します。 prod <=minprodの場合は、minprodをprodで更新します。
-
現在、minprodは、すべてのトリプレットの中で最小の積の値を持っています。
-
トリプレットの各要素に対して3つのforループを使用して配列を再度トラバースします。
-
0 <=i
-
prod =arr [i] * arr [j] *arr[k]を計算します。 prod ==minprodの場合、カウントをインクリメントします。このペアは最小の製品であるため。
-
すべてのループの終わりに、カウントには、条件を満たすトリプレットの総数が含まれます。
-
結果としてカウントを返します。
例
#include <bits/stdc++.h> using namespace std; int countTriplets(int arr[],int n){ int count = 0; int prod=1; int minprod=9999; //making minimum as larger than any product in array for (int i = 0; i < n-2; i++){ for (int j = i+1; j < n-1; j++){ for (int k = j+1; k < n; k++){ prod=arr[i]*arr[j]*arr[k]; if ( prod<=minprod ) { minprod=prod; } } } } // cout<<"minproduct :"<<minprod; //to print minimum product for (int i = 0; i < n-2; i++){ for (int j = i+1; j < n-1; j++){ for (int k = j+1; k < n; k++){ prod=arr[i]*arr[j]*arr[k]; if ( prod==minprod ){ count++; //cout<<endl<<"a :"<<arr[i]<<" b :"<<arr[j]<<" c :"<<arr[k]; //to print } } } } return count; } int main(){ int Arr[]={ 1,2,3,1,2,6}; int N=5; //length of array cout <<endl<< "Number of triplets : "<<countTriplets(Arr,N); return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Number of triplets : 2
-
C++でセットをk個のサブセットに分割する方法の数を数えます
与えられた2つの数字eとp。目標は、セットのe個の要素をp個のパーティション/サブセットに分割できる方法の数を数えることです。 例 入力 e=4 p=2 出力 Count of number of ways to partition a set into k subsets are: 7 説明 If elements are: a b c d then ways to divide them into 2 partitions are: (a,b,c)−(d), (a,b)−(c,d), (a,b,c)−(d), (a)−(b,c,d), (
-
ソートされた二重リンクリスト内のトリプレットをカウントします。このリストの積は、C++で指定された値xに等しくなります。
整数値を含むソートされた二重リンクリストが与えられます。目標は、積が与えられた値xに等しいトリプレットを見つけることです。入力リンクリストが3−4−1−2で、xが6の場合、カウントは1になります(トリプレット(3,1,2)) 例 入力 linked list: [ 200−4−16−5−10−10−2 ] x=200 出力 Count of triplets in a sorted doubly linked list whose product is equal to a given value x are: