检查C++矩阵中是否存在具有给定乘积的数对


我们有一个N x M阶的矩阵和一个乘积K。任务是检查矩阵中是否存在具有给定乘积的数对。

假设矩阵如下所示:

1234
5678
9101112
13141516

如果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

更新于:2019年10月22日

92 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告