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

C++で最小の製品トリプレットを形成する方法を数える


一連の数字Arr[]が与えられます。目標は、可能なすべてのトリプレットの最小の積に等しい積を持つトリプレットの数を数えることです。(i

これを行うには、最初に(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

  1. 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), (

  2. ソートされた二重リンクリスト内のトリプレットをカウントします。このリストの積は、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: