牛牛爱博弈
牛牛爱博弈
https://ac.nowcoder.com/acm/problem/205086
题目
牛牛:我们来玩取石子游戏。一共有 颗石子,每个人每次可以取 1 或 2 颗石子,谁取走了最后一颗石子就算谁获胜。
牛妹:这游戏太无聊了。
牛牛:那改一改。一共有 颗石子,每个人每次可以取 颗石子,谁取走了最后一颗石子就算谁获胜。
牛妹:好的,你先开始取吧。
牛牛心里知道自己是否有必胜策略,但他想来考考你。
因为牛牛和牛妹很爱玩这种游戏,所以本题有多组数据。
(注:牛牛叫 Alan,牛妹叫 Frame。)
解题思路
如果只剩下 3 颗石子,那么谁先手,就谁输。
如果 是 3 的倍数,那么 Alan 不可能取完所有石子,因为 3 不可能整除 。
这时,Frame 可以取 1 颗或 2 颗石子,让剩下的石子数恢复成 3 的倍数,直至只剩下 1 颗或 2 颗石子,Frame 赢。
如果 不是 3 的倍数,那么 Alan 每次可以取 1 颗或 2 颗石子,使剩下的石子数目是 3 的倍数,直至取完,Alan 赢。
C++代码
#include<iostream> using namespace std; int main(){ int T, n; cin >> T; while(T--){ cin >> n; if(n%3) cout << "Alan" << endl; else cout << "Frame" <<endl; } return 0; }