C++ 中允許重複元素的情況下,計算乘積等於給定數字的三元組數量


給定一個數字陣列 Arr[]。目標是計算乘積等於給定數字 p 的三元組的數量。可以使用相同的值但不同元素組成多個三元組。例如,在陣列 [1,2,3,1,2] 中,(1,2,3) 和 (3,1,2) 將被視為不同的三元組,因為元素不同,即使值相同。

讓我們透過示例來理解。

輸入 − arr[]= { 1,2,3,2,4,1,5 }, p=4

輸出 − 三元組數量:3

解釋

Triplet 1[ 1,2,3,2,4,1,5 ] → (1,2,2) product=4
Triplet 2 [ 1,2,3,2,4,1,5 ] → (1,4,1) product=4
Triplet 3 [ 1,2,3,2,4,1,5 ] → (2,2,1) product=4
Number of triplets with product 4 is 3.

輸入 − arr[]= { 1,1,2,1,2,2 }, p=8

輸出 − 三元組數量 − 1

解釋

Triplet 1 [ 1,1,2,1,2,2 ] → (2,2,2) product=8
Number of triplets with product 8 is 1

下面程式中使用的方案如下

  • 我們使用一個整數陣列 Arr[],並用隨機數初始化。

  • 使用一個變數 product 儲存乘積值。N 儲存 Arr[] 的長度。

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

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

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

  • 使用三個 for 迴圈遍歷陣列,分別對應三元組的每個元素。

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

  • 計算 prod=arr[i]*arr[j]*arr[k]。如果 prod==p,則遞增 count。

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

  • 返回 count 作為期望的結果。

示例

#include <bits/stdc++.h>
using namespace std;
int countTriplets(int arr[],int n,int p){
   int count = 0;
   int prod=1;
   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==p ){
                  count++;
                  // cout<<endl<<"a :"<<arr[i]<<" b :"<<arr[j]<<" c :"<<arr[k]; //to print
               }
            }
         }
      }  
   }
   return count;
}
int main(){
   int Arr[]={ 1,2,3,6,1,6,3,2,1};
   int N=9; //length of array
   int product=6;
   cout <<endl<< "Number of triplets : "<<countTriplets(Arr,N,product);
   return 0;
}

輸出

如果我們執行上述程式碼,它將生成以下輸出:

Number of triplets : 18.

更新於: 2020-08-29

351 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告