समस्या विवरण
हमें दो धनात्मक संख्याओं वाली सरणियाँ और एक मान K दिया गया है। लक्ष्य उन अद्वितीय जोड़ों (A,B) की गणना करना है जहाँ A पहली सरणी से और B दूसरी सरणी से है, और A%B=K या B%A=K हो।
उदाहरण
इनपुट: arr_1[] = {1,2,5,3,4}, arr_2[] = {7,1,3}, k=2
आउटपुट: 2
व्याख्या: (5,7) → 7%5=2, (5,3) → 5%3=2
इनपुट: arr_1[] = {2,5}, arr_2[] = {3,7}, k=1
आउटपुट: 2
व्याख्या: (2,3) → 3%2=1, (2,7) → 7%2=1
दृष्टिकोण
दोनों सरणियों को नेस्टेड लूप से पार करें। प्रत्येक जोड़े के लिए मॉड्यूलो शर्त जाँचें। अद्वितीय जोड़ों के लिए set का उपयोग करें।
एल्गोरिदम
- दोनों सरणियाँ और
kलें setबनाएँ> se - दोनों सरणियों पर नेस्टेड लूप:
- यदि
arr_1[i] > arr_2[j]औरarr_1[i]%arr_2[j]==kतो जोड़ा डालें - अन्यथा यदि
arr_2[j]%arr_1[i]==kतो जोड़ा डालें
- यदि
se.size()लौटाएँ
C++ कार्यान्वयन
#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) {
set> se;
for (int i = 0; i < size_arr_1; i++) {
for (int j = 0; j < size_arr_2; j++) {
if (arr_1[i] > arr_2[j]) {
if (arr_1[i] % arr_2[j] == k)
se.insert({arr_1[i], arr_2[j]});
} else {
if (arr_2[j] % arr_1[i] == k)
se.insert({arr_2[j], arr_1[i]});
}
}
}
return se.size();
}
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: " << modulo_pairs(arr_1, arr_2, size_arr_1, size_arr_2, k);
return 0;
}
आउटपुट
Count: 2