计算在C ++中形成最小产品三胞胎的方法
我们给了一个数字数组Arr[]。目标是计算其乘积等于所有可能的三列乘积中最小乘积的三乘列数。如果(i<j<k)且arr[i]*arr[j]*arr[k]最小,则对三乘列进行计数。
为此,我们将首先找到最小的乘积(i<j<k)。并存储为minprod。然后计算所有具有product=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(intarr[],intn)接受一个数组,将其长度作为输入,并返回乘积等于最小乘积的三元组。
将三元组的数量的初始变量计数设为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,则增加计数。由于这对产品的数量最少。
在所有循环结束时,计数将具有满足条件的三元组总数。
返回计数结果。
示例
#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