检查C++矩阵中是否存在具有给定乘积的数对
我们有一个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除以当前元素时,商也存在于哈希表中。所以所需的条件如下:
(k % matrix[i, j]) 为假,且哈希表中包含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"; }
输出
Pair is present
广告