用 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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.