Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

주어진 제품과의 쌍이 C++의 Matrix에 존재하는지 확인

<시간/>

우리는 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 mod matrix[i, n])은 거짓이고 해시 테이블에는 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