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