C ++中的黑板XOR游戏

假设我们有一个称为nums的数组,其中nums [i]写在黑板上。Ram和Sam轮流擦除黑板上的一个元素,Ram首先开始。如果擦除数字导致黑板上所有元素的按位XOR变为0,则该玩家输了。一个元素的按位异或就是该元素本身,没有元素的按位异或为0。如果任何玩家在黑板上所有元素的按位异或等于0的情况下开始回合,则该玩家将获胜。假设数组保持[1、2、1],因此Ram可以删除1或2,如果Ram删除1,则数组将是[2,1],因为元素1的XOR 2 = 3的异或,现在Sam可以删除任何元素,因为Ram将是删除最后一个元素的元素,并且他将丢失。如果他选择2首先删除,则数组变为[1,1],XOR为0,

为了解决这个问题,我们将遵循以下步骤-

  • n:= nums的大小

  • x:= 0

  • 对于我以数字表示的所有元素-

    • x:= x XOR i

  • return x等于0或n mod 2为0

让我们看下面的实现以更好地理解-

示例

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool xorGame(vector<int>& nums) {
      int n = nums.size();
      int x = 0;
      for(int i : nums) x ^= i;
      return x == 0 || n % 2 == 0;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,1};
   cout << (ob.xorGame(v));
}

输入值

{1,2,1}

输出结果

0