计算三元组,以便在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(int arr [],int n)接受一个数组,其长度返回三元组,其中一个数字可以写为另外两个数字的和

  • 将三元组的数量的初始变量计数设为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
猜你喜欢