计算满足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(int A [],int n)将一个数组及其大小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