C++ 中统计满足条件的三元组


给定一个长度为 n 的整数数组 Arr[]。目标是找到满足条件的三元组 (Arr[i],Arr[j],Arr[k]) 的数量,其中任意两个数字之和等于第三个数字。

a+b=c,其中 a、b、c 是 Arr[] 中的元素,其索引分别为 i、j、k,且满足 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(int arr[],int n) 接收一个数组及其长度,并返回其中一个数字可以写成另外两个数字之和的三元组数量。

  • 将初始变量 count 设置为 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]。如果满足条件,则递增计数器。

  • 在所有循环结束后,count 将包含满足条件的三元组的总数。

  • 返回 count 作为结果。

示例

 在线演示

#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

更新于: 2020-09-16

1K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告