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.