计算满足C ++中给定条件的索引对
我们给了前N个自然数的排列数组。这里的目标是找到满足以下条件的元素的索引对-
如果数组是Arr[],则i,j是索引,对元素对进行计数,使Arr[i]+Arr[j]=max(Arr[x])使得i<=x<=j。
即,Arr[i]和A[j]之和等于在这两个段之间出现的最大元素。
输入值
Arr[]= { 2,4,1,3,6,5 }输出结果
满足给定条件的索引对的数量:1
说明-对的总和给出-
2+4=6,最大为6,但不在2到4之间。
2+1=3,3不在2和1之间,并且它们之间的最大值为4。
2+3=5,5不在2到3之间,它们之间的最大值是4。
2+6=8,8不在2到6之间,最大值在4之间。
相似地
1+5=6,6在1到5之间,最大值在6之间。
在所有满足条件的对中,只有1对存在。
输入值
Arr[]= { 1,2,5,4,3 }输出结果
满足给定条件的索引对的数量:2
说明-对的总和给出-
1+5=6,最大为6,但不在1到5之间。
1+4=5,5在1到4之间,最大值在5之间。
2+3=5,5在2到3之间,并且它们之间的最大值为5。
1+3=4,4在1到3之间,但它们之间的最大值为5。
在所有满足条件的2对中。
以下程序中使用的方法如下
整数数组Arr[]存储数字并确定其长度。
函数countPairs(intA[],intn)将一个数组及其大小n作为输入,并返回满足上述条件的对数。
变量计数用于存储此类对的初始值0。
用第一个元素及其在maxindex中的索引初始化为max1,以存储到目前为止找到的最大值的值和索引。
开始使用for循环遍历数组。
如果给定A[j]>=max1,则在嵌套的for循环内,然后用j更新max1及其索引。
对于每对A[i]和A[j],如果sum等于max1且索引maxindex在i和j之间,则满足条件时增加计数。
在结束之后,两个循环都返回存在于count中的结果。
示例
// CPP implementation of the approach
#include<bits/stdc++.h>
using namespace std;
//函数返回计数
//必需的索引对
int countPairs(int A[], int n){
//要存储所需的计数
int count = 0;
int i,j,k;
int max1=A[0];
int maxindex=0;
for ( i = 0; i<n-1; i++){
for(j=i+1;j<n;j++){
if(A[j]>=max1){
max1=A[j];
maxindex=j;
}
if(A[i]+A[j]==max1 && maxindex>=i && maxindex<=j)
count++;
}
}
//返回子段数
return count;
}
int main(){
int Arr[] = {3, 4, 6, 1, 5, 2};
int size =6;
cout <<endl<<"满足给定条件的索引对的数量:"
<<countPairs(Arr,size);
return 0;
}输出结果
满足给定条件的索引对的数量: 1