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 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告