用 C++ 統計形成最小乘積三元組的方法數


給定一個數字陣列 Arr[]。目標是計算乘積等於所有可能的三元組的最小乘積的三元組的數量。如果 (i<j<k) 且 arr[i]*arr[j]*arr[k] 是可能的最小值,則計算三元組的數量。

我們將首先找到 (i<j<k) 時的最小乘積,並將其儲存為 minprod。然後計算所有乘積等於 minprod 的三元組。

讓我們透過示例來理解。

輸入 − 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[]。

  • 使用一個變數 N 來儲存 Arr[] 的長度。

  • 函式 countTriplets(int arr[], int n) 以陣列及其長度作為輸入,並返回乘積等於最小乘積的三元組的數量。

  • 將初始變數 count 設定為 0,表示三元組的數量。

  • 將初始變數 prod 設定為每個三元組的乘積。初始值為 1。

  • 將初始變數 minprod 設定為所有三元組的最小可能乘積。初始值為 999。

  • 使用三個 for 迴圈遍歷陣列以獲取每個三元組的元素。

  • 最外層迴圈從 0<=i<n-2 開始,內層迴圈 i<j<n-1,最內層迴圈 j<k<n。

  • 計算 prod=arr[i]*arr[j]*arr[k]。如果 prod<=minprod,則使用 prod 更新 minprod。

  • 現在 minprod 儲存了所有三元組的最小乘積值。

  • 再次使用三個 for 迴圈遍歷陣列以獲取每個三元組的元素。

  • 最外層迴圈從 0<=i<n-2 開始,內層迴圈 i<j<n-1,最內層迴圈 j<k<n。

  • 計算 prod=arr[i]*arr[j]*arr[k]。如果 prod==minprod,則遞增 count。因為這個三元組具有最小乘積。

  • 在所有迴圈結束後,count 將包含滿足條件的三元組的總數。

  • 返回 count 作為結果。

示例

 現場演示

#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

更新於: 2020-08-29

153 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告