计算在C ++中总和在[a,b]范围内的数组中的三元组数

给定一个整数数组Arr []以及两个变量a和b来定义范围[a,b]。目的是找到三和的总数在此范围[a,b]之间。

我们将通过使用三个for循环来做到这一点。如果arr [i] + arr [j] + arr [k]> = a并且arr [i] + arr [j] + arr [k] <= b,则增加计数。其中0 <= i <= n-2,i <j <n-1,j <k <n。其中n为否。Arr []中的元素集合。

让我们通过示例来理解。

输入− arr [] = {1,2,3,4,5},N = 5,L = 2,R = 8

输出-三胞胎数量-4

说明-

Triplets with sum>=2 and sum<=8
(1,2,3) → 6
(1,2,4) → 7
(1,2,5) → 8
(1,3,4) → 8
Total triplets: 4

输入− arr [] = {2,2,2,2,2},N = 5,L = 2,R = 5

输出-三胞胎数量-0

说明-

每个三元组的总和为6。这不在[2,5]范围内

三胞胎总数:0

以下程序中使用的方法如下

  • 我们采用用随机数初始化的整数数组Arr []。

  • 取变量L和R来定义范围[L,R]。N存储Arr []的长度。

  • 函数countTriplets(int arr [],int n,int a,int b)接受一个数组,将其长度和范围变量作为输入,并返回其和在此范围内的三元组。

  • 将三元组的数量的初始变量计数设为0。

  • 将初始变量和作为每个三元组的总和。最初为0。

  • 对三元组的每个元素使用三个for循环遍历数组。

  • 最外层循环从0 <= i <n-2,内层循环i <j <n-1,最内层j <k <n。

  • 计算sum = arr [i] + arr [j] + arr [k]。如果a <= sum <= b,则增加计数。

  • 在所有循环结束时,计数将具有满足条件的三元组总数。

  • 返回计数作为所需结果。

示例

#include <bits/stdc++.h>
using namespace std;
int countTriplets(int arr[],int n,int a,int b){
   int count = 0;
   int sum=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++){
            sum=arr[i]+arr[j]+arr[k];
            if ( sum>=a && sum<=b) //check{
               count++;
               // cout<<endl<<"a :"<<arr[i]<<" b :"<<arr[j]<<" c :"<<arr[k]; //to print
            }
         }
      }
   }
   return count;
}
int main(){
   int Arr[]={ 5,4,3,6,8,2 };
   int L=9;
   int R=15;
   int N=6; //length of array
   cout <<endl<< "Number of triplets : "<<countTriplets(Arr,N,L,R);
   return 0;
}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Number of triplets : 14
猜你喜欢