C++中统计数组中满足i*arr[i] > j*arr[j]的数对


给定一个数字数组,目标是找到数组中满足以下条件的元素对:

如果 (i*arr[i] > j*arr[j]),则 (arr[i],arr[j]) 是一个有效的数对。

如果数组是 [ 5,4,3,2,1 ],则数对将是 [3,1] 和 [2,1]。

让我们通过例子来理解。

输入 − arr[] = [ 1,5,4,1,2,8,3 ]

输出 − 满足条件 i*arr[i] > j*arr[j] 的数对数量为 − 3

解释 − 数对为 (5,1), (4,1), (8,3)

输入 − arr[] = [ -1,-2,3,4,5,6 ]

输出 − 满足条件 i*arr[i] > j*arr[j] 的数对数量为 − 1

解释 − 数对为 (-1,-2)

下面程序中使用的方法如下:

我们将使用嵌套for循环遍历从1到N。对于每个i和arr[i],搜索满足条件i*arr[i]>j*arr[j] (且i!=j)的j和arr[j]。如果条件为真,则递增计数器。

  • 取一个整数数组。

  • 函数condition_pair(int arr[], int size)接收数组及其大小,并返回满足条件的数对的数量。

  • 将初始计数设置为0。

  • 从i=1遍历到i < size-1

  • 从j=i+1遍历到j<size。

  • 如果 (i*arr[i]) > (j*arr[j]) 为真。递增计数器。

  • 对于每个i和j,计算temp= (i*j)%(i+j)。

  • 两次迭代结束后,计数器将包含此类数对的总数。

  • 返回计数器作为结果。

示例

 在线演示

#include <iostream>
using namespace std;
int condition_pair(int arr[], int size){
   int count = 0;
   for (int i = 0; i < size - 1; i++){
      for (int j = i + 1; j < size; j++){
         if(i*arr[i] > j*arr[j]){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = { 2, 4, 1, 9, 6 };
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of pairs in an array that hold i*arr[i] > j*arr[j] are: "<<condition_pair(arr, size);
   return 0;
}

输出

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

Count of pairs in an array that hold i*arr[i] > j*arr[j] are: 2

更新于:2020年12月2日

151 次查看

启动你的职业生涯

通过完成课程获得认证

开始学习
广告