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)接收一个数组、它的长度和范围变量作为输入,并返回和在这个范围内的三元组。
将初始变量count设置为0,表示三元组的数量。
将初始变量sum设置为每个三元组的和。初始值为0。
使用三个for循环遍历数组中的每个三元组元素。
最外层循环从0<=i<n-2开始,内层循环i<j<n-1,最内层循环j<k<n。
计算sum=arr[i]+arr[j]+arr[k]。如果a<=sum<=b,则递增count。
在所有循环结束后,count将包含满足条件的三元组总数。
返回count作为期望结果。
示例
#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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP