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

Kiểm tra xem có thể chọn một số từ mọi hàng sao cho xor của các số lớn hơn 0 trong C ++ hay không

Giả sử chúng ta có một mảng 2D kích thước N x M. Nhiệm vụ là kiểm tra xem chúng ta có thể chọn một số từ mọi hàng hay không, sao cho XOR của các phần tử đó khác 0 hoặc lớn hơn 0. Giả sử một ma trận là như thế này -

7 7 7
10 10 7

Nếu chúng tôi thực hiện XOR, câu trả lời sẽ là khác 0, vì phần tử ngoại trừ cuối cùng của hai hàng là 7 và 10

Để giải quyết vấn đề này, giải pháp sẽ rất dễ dàng. Ban đầu hãy kiểm tra xem XOR của các phần tử của cột đầu tiên của mỗi hàng có phải là 0 hay không. Nếu nó là khác 0 thì nó là có thể. nếu không, hãy kiểm tra xem bất kỳ hàng nào có hai hoặc nhiều phần tử riêng biệt hay không, nếu có thì cũng có thể. Nếu cả hai điều kiện trên không được thỏa mãn thì không thể thực hiện được.

Ví dụ

#include<iostream>
using namespace std;
#define N 2
#define M 3
bool isXORnonZero(int matrix[N][M]) {
   int xor_value = 0;
   for (int i = 0; i < N; i++) {
      xor_value ^= matrix[i][0];
   }
   if (xor_value != 0)
      return true;
   for (int i = 0; i < N; i++) {
      for (int j = 1; j < M; j++) {
         if (matrix[i][j] != matrix[i][0])
         return true;
      }
   }
   return false;
}
int main() {
   int mat[N][M] = {
      { 7, 7, 7 },
      { 10, 10, 7 }
   };
   if (isXORnonZero(mat))
      cout << "XOR has non-zero value";
   else
      cout << "XOR has zero value";
}

Đầu ra

XOR has non-zero value