C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

特定の製品とのペアがC++のマトリックスに存在するかどうかを確認します


次数NxMの行列が1つあり、積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])はfalseであり、ハッシュテーブルには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

  1. 行列がC++で対称であるかどうかをチェックするプログラム

    線形代数では、行列M [] []は、行列の転置が行列自体と等しい場合にのみ、対称行列であると言われます。行列の転置とは、行列を対角線上で反転させることです。これにより、行列の行と列のインデックスが切り替わります。 対称行列の例の下- $$ \ begin {bmatrix} 1&4&7 \\ 4&5&6 \\ 7&6&9 \\ \ end {bmatrix} \ Rightarrow \ begin {bmatrix} 1&4&7 \\ 4&5 &6 \\ 7&6&9 \\ \ end {bmatrix} $$ 上記の行列は、左側の行列を転置した対称行列であり、結果は行列自体と同じです

  2. C++でべき等行列をチェックするプログラム

    行列M[r][c]が与えられた場合、「r」は行数を示し、「c」はr=cが正方行列を形成するような列数を示します。与えられた正方行列がべき等行列であるかどうかを確認する必要があります かどうか。 べき等行列 行列「M」はべき等行列と呼ばれます 行列「M」にそれ自体を掛けたものだけが同じ行列「M」を返す場合、つまり M * M=M。 以下の例のように- 上記の行列はそれ自体で乗算され、同じ行列を返すと言えます。したがって、マトリックスはIデポテンツマトリックスです。 。 例 Input: m[3][3] = { {2, -2, -4},    {-1, 3,