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
廣告