আমাদের একটি N x M অর্ডারের ম্যাট্রিক্স আছে। এবং একটি গুণফল K। কাজ হল চেক করা যে ম্যাট্রিক্সে দেওয়া গুণফলের জোড়া আছে কিনা।
উদাহরণস্বরূপ, একটি ম্যাট্রিক্স:
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 |
যদি K = 42 হয়, তবে একটি জোড়া আছে: (6, 7)
এটি সমাধান করতে হ্যাশিং ব্যবহার করব। ম্যাট্রিক্সের সব উপাদান নিয়ে হ্যাশ টেবিল বানাব। ম্যাট্রিক্স ট্রাভার্স করব, ট্রাভার্স করার সময় চেক করব বর্তমান উপাদানটি দিয়ে দেওয়া গুণফল বিভাজ্য কিনা, এবং ভাগফলও হ্যাশ টেবিলে আছে কিনা। শর্ত:
(k % matrix[i][j] == 0) এবং hash table-এ k/matrix[i][j] আছে।
যদি পাওয়া যায়, true রিটার্ন করুন, অন্যথায় বর্তমান উপাদান হ্যাশ টেবিলে ইনসার্ট করুন। কোনো জোড়া না পেলে false রিটার্ন করুন।
উদাহরণ কোড
#include <iostream>
#include <unordered_set>
#define N 4
#define M 4
using namespace std;
bool isPairPresent(int matrix[N][M], int K) {
unordered_set<int> s;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if ((K % matrix[i][j] == 0) && (s.find(K / matrix[i][j]) != s.end())) {
return true;
} else {
s.insert(matrix[i][j]);
}
}
}
return false;
}
int main() {
int matrix[N][M] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}};
int k = 42;
if (isPairPresent(matrix, k) == false)
cout << "NO PAIR EXIST";
else
cout << "Pair is present";
return 0;
}
আউটপুট
Pair is present