计算来自两个数组的对,其对数组的取模运算在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。在setse的最后,大小是两个取模运算结果为k的两个数组的唯一对的数量。
取具有正数元素和长度的整数数组arr_1[]和arr_2[]作为size_arr_1和size_arr_2。
取整数k。
函数modulo_pairs(intarr_1[],intarr_2[],intsize_arr_1,intsize_arr_2,intk)接受两个数组及其长度,并返回对,以使两个数组的元素的模运算结果为k。
将count的初始值设为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。如果为true,则制作一对arr_1[i]和arr_2[j]并插入以设置se。
否则检查arr_2[j]%arr_1[i]==k。如果为true,则制作一对arr_1[i]和arr_2[j]并插入以设置se。
计算为se.size()。用于计算唯一对。
返回计数作为结果。
示例
#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<<"//来自两个取模运算结果为K的数组的对数:"<<modulo_pairs(arr_1, arr_2, size_arr_1, size_arr_2, k); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
//来自两个取模运算结果为K的数组的对数: 2