C++中的黑板异或游戏


假设我们有一个数组名为nums,其中nums[i]写在黑板上。Ram和Sam轮流从黑板上擦除一个元素,先由Ram开始。如果擦除一个数字导致黑板上所有元素的按位异或结果为0,则该玩家将输掉游戏。一个元素的按位异或结果为元素本身,没有元素的按位异或结果为0。如果任何玩家开始时黑板上所有元素的按位异或结果为0,则该玩家将获胜。假设数组为[1, 2, 1],那么Ram可以删除1或2,如果Ram删除1,则数组将变成[2,1],因为元素1 XOR 2 = 3,现在Sam可以删除任何元素,因为Ram将删除最后一个元素并输掉游戏。如果他选择先删除2,则数组将变成[1,1],异或结果为0,所以Ram将输掉游戏。

为了解决这个问题,我们将按照以下步骤进行操作 -

  • n := nums的大小
  • x := 0
  • 遍历nums中的所有元素i -
    • x := x XOR i
  • 返回x等于0或n模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

更新日期: 02年6月2020日

210次浏览

开启你的 职业生涯

完成课程即可获得认证

开始
广告