Computer >> Máy Tính >  >> Lập trình >> C ++

Giá trị XOR tối đa trong ma trận trong C ++


Trong bài toán này, chúng ta được đưa ra một ma trận có kích thước n X n. Nhiệm vụ của chúng tôi là tạo một chương trình sẽ tính toán giá trị XOR tối đa của một hàng hoàn chỉnh hoặc một cột hoàn chỉnh.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào -

N = 3
mat[N][N] = {{4, 9, 1}
{2, 8, 3}
{10, 12, 11}}

Đầu ra -

13

Giải thích -

Row1: 4^9^1 = 12
Row2: 2^8^3 = 9
Row3: 10^12^11 = 13
Col1: 4^2^10 = 12
Col2: 9^8^12 = 13
Col3: 1^3^11 = 9

Ở đây, chúng tôi đã tính toán XOR của tất cả các hàng và cột và sau đó giá trị tối đa của chúng sẽ được in ra.

Để giải quyết vấn đề này, chúng tôi sẽ tính toán XOR của tất cả các hàng và cột của ma trận và tìm giá trị lớn nhất của chúng.

Một cách để tìm XOR của các hàng và cột là lặp lại ma trận 2 lần, một cho các cột và một cho các hàng.

Nhưng chúng ta có thể làm điều tương tự bằng cách sử dụng một lần lặp trên ma trận vuông. Và một cho khôn ngoan theo hàng và một cho theo cột.

Điều này có thể được thực hiện bằng cách sử dụng cùng một phép lặp bằng cách sử dụng ma trận [i] [j] để duyệt qua ma trận theo hàng [j] [i] để duyệt theo cột

Ví dụ

Chương trình minh họa giải pháp của chúng tôi,

#include<iostream>
using namespace std;
const int MAX = 1000;
int maxRCXOR(int mat[][MAX], int N){
   int rowXOR, colXOR;
   int maxXOR = 0;
   for (int i = 0 ; i < N ; i++){
      rowXOR = 0, colXOR = 0;
      for (int j = 0 ; j < N ; j++){
         rowXOR = rowXOR^mat[i][j];
         colXOR = colXOR^mat[j][i];
      }
      if (maxXOR < max(rowXOR, colXOR))
         maxXOR = max(rowXOR, colXOR);
      }
      return maxXOR;
}
int main() {
   int N = 3;
   int matrix[][MAX]= {
      {4, 9, 1},
      {2, 8, 3},
      {10, 12, 11}
   };
   cout<<"Maximum XOR of all row XOR and Column XOR is "<<maxRCXOR(matrix,N);
   return 0;
}

Đầu ra

Maximum XOR of all row XOR and Column XOR is 13