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次瀏覽

開啟你的 職業生涯

完成課程即可獲得認證

開始
廣告