C++ 中从两个数组中统计模运算结果为 K 的对数


给定两个包含正数的数组和一个值 K。目标是找到数组元素的唯一对,使得 (A,B) 类型的对满足 A%B=K 或 B%A=K,其中 A 属于第一个数组,B 属于第二个数组。

让我们通过示例来理解

输入 − arr_1[] = {1,2,5,3,4}; arr_2[] = {7,1,3}; k=2

输出 − 模运算结果为 K 的两个数组中对的数量为 − 2

解释 − 对为 (5,7) - (arr_1[2],arr_2[1]) 7%5=2 和 (5,3) - (arr_1[2],arr_2[2]) 5%3=2

输入 − arr_1[] = {2,5}; arr_2[] = {3,7}; k=1

输出 − 模运算结果为 K 的两个数组中对的数量为 − 2

解释 − 对为 (2,3) - (arr_1[0],arr_2[0]) 3%2=1 和 (2,7) - (arr_1[0],arr_2[1]) 7%2=1

下面程序中使用的方案如下

在这种方案中,我们将使用 for 循环遍历两个数组。将对插入到 set<pair<int, int> > se 中,其中 A%B=k 或 B%A=k,其中 A 属于 arr_1,B 属于 arr_2。最后,set se 的大小就是两个数组中模运算结果为 k 的唯一对的数量。

  • 取整数数组 arr_1[] 和 arr_2[],它们包含正元素,长度分别为 size_arr_1 和 size_arr_2。

  • 取整数 k。

  • 函数 modulo_pairs(int arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int k) 获取两个数组及其长度,并返回满足两个数组元素的模运算结果为 k 的对。

  • 将计数的初始值设为 0。

  • 取 set<pair<int, int> > se;对 <int,int>。

  • 从 i=0 到 i<size_arr_1 遍历 arr_1[],从 j=0 到 j<size_arr_2 遍历 arr_2[]。

  • 对于每个对 arr_1[i],arr_2[j],检查 arr_1[i]>arr_2[j] 是否成立。如果成立,则检查 arr_1[i]%arr_2[j]==k 是否成立。如果成立,则创建 arr_1[i] 和 arr_2[j] 的对,并将其插入到 set se 中。

  • 否则,检查 arr_2[j]%arr_1[i]==k 是否成立。如果成立,则创建 arr_1[i] 和 arr_2[j] 的对,并将其插入到 set se 中。

  • 计算 count 为 se.size()。用于计算唯一对的数量。

  • 返回 count 作为结果。

示例

 现场演示

#include <bits/stdc++.h>
using namespace std;
int modulo_pairs(int arr_1[], int arr_2[], int size_arr_1, int size_arr_2, int k){
   int count = 0;
   set<pair<int, int> > se;
   for (int i = 0; i < size_arr_2; i++){
      for (int j = 0; j < size_arr_1; j++){
         if (arr_1[i] > arr_2[j]){
            if (arr_1[i] % arr_2[j] == k){
               se.insert(make_pair(arr_1[i], arr_2[j]));
            }
         }
         else{
            if (arr_2[j] % arr_1[i] == k){
               se.insert(make_pair(arr_2[j], arr_1[i]));
            }
         }
      }
   }
   count = se.size();
   return count;
}
int main(){
   int arr_1[] = { 2, 7, 1, 9 };
   int arr_2[] = { 4, 10, 3, 10 };
   int size_arr_1 = sizeof(arr_1) / sizeof(arr_1[0]);
   int size_arr_2 = sizeof(arr_2) / sizeof(arr_2[0]);
   int k = 3;
   cout<<"Count of pairs from two arrays whose modulo operation yields K are:"<<modulo_pairs(arr_1, arr_2, size_arr_1, size_arr_2, k);
   return 0;
}

输出

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

Count of pairs from two arrays whose modulo operation yields K are: 2

更新于: 2020-12-02

154 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.