计算三元组,以便在C ++中可以将其中一个数字写成另外两个数字的和
给我们一个长度为n的整数数组Arr[]。目的是找到三元组的数量(Arr[i],Arr[j],Arr[k]),以使任何两个数字的总和等于第三个数字。
a+b=c,其中a,b,c是具有索引i,j,k的Arr[]元素,使得0<=i<j<k<n我们将通过使用三个for循环来做到这一点。如果arr[x]+arr[y]=arr[z]且x!=y!=z,则增加计数。让我们通过示例来理解。
输入值
arr[]= { 1,2,2,3,4 }, N=5
输出结果
Number of triplets: 4
说明
具有arr[x]+arr[y]=arr[z]的三元组。
Arr{}=[ 1,2,2,3,4 ] =(1,2,3) → 1+2=3 Arr{}=[ 1,2,2,3,4 ] =(1,2,3) → 1+2=3 Arr{}=[ 1,2,2,3,4 ] =(1,3,4) → 1+3=4 Arr{}=[ 1,2,2,3,4 ] =(2,2,4) → 2+2=4
三胞胎总数:4
输入值
arr[]= {2,2,2,2,2}, N=5
输出结果
Number of triplets: 0
说明
每两个数字的和=4,不等于第三=2。
三胞胎总数:0
以下程序中使用的方法如下
我们采用用随机数初始化的整数数组Arr[]。
变量N存储Arr[]的长度。
函数countTriplets(intarr[],intn)接受一个数组,其长度返回三元组,其中一个数字可以写为另外两个数字的和
将三元组的数量的初始变量计数设为0。
对三元组的每个元素使用三个for循环遍历数组。
最外层循环从0<=i<n-2,内层循环i<j<n-1,最内层j<k<n。
检查arr[i]+arr[j]==arr[k]或arr[i]+arr[k]==arr[j]或arr[k]+arr[j]==arr[i]如果如果为true,则递增计数。
在所有循环结束时,计数将具有满足条件的三元组总数。
返回计数结果。
示例
#include <bits/stdc++.h> using namespace std; int countTriplets(int arr[], int n){ int count = 0; 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++){ if(arr[i]+arr[j]==arr[k] || arr[j]+arr[k]==arr[i] || arr[k]+arr[i]==arr[j]){ count++; } } } } return count; } int main(){ int Arr[]={ 1,2,2,3,4 }; int N=5; //length of array cout <<endl<< "Number of triplets : "<<countTriplets(Arr,N); return 0; }
输出结果
Number of triplets : 4