牛牛爱博弈
牛牛爱字符串
https://ac.nowcoder.com/acm/contest/6885/A
链接:https://ac.nowcoder.com/acm/contest/6885/C
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
牛牛和牛妹玩博弈游戏。
牛牛:我们来玩取石子游戏。一共有n堆石子,每个人每次可以取1或2颗石子,谁取走了最后一颗石子就算谁获胜。
牛妹:这游戏太无聊了。
牛牛:那改一改。一共有n堆石子,每个人每次可以取1,2,4,8,...2^k颗石子,谁取走了最后一颗石子就算谁获胜。
牛妹:好的,你先开始取吧。
牛牛心里知道自己是否有必胜策略,但他想来考考你。
因为牛牛和牛妹很爱玩这种游戏,所以本题有多组数据。
输入描述:
第一行,输入数据组数T。
接下来T行,每行一个数n。
输出描述:
对于每一组数据,
如果牛牛必胜,则输出“Alan”(不含引号);
如果牛妹胜,则输出“Frame”(不含引号)。
(PS:牛牛叫 Alan ,牛妹叫 Frame )
示例1
输入
3
1
2
3
输出
Alan
Alan
Frame
说明
当n=1时,牛牛直接取1颗石子即可获胜。
当n=2时,牛牛直接取2颗石子即可获胜。
当n=3时,显然牛牛论怎么取,牛妹都可以获胜。
示例2
输入
3
17
18
19
输出
Alan
Frame
Alan
思路
观察易得如果目前石子是3或者3的倍速,那么先手不可能取完
那么后手只需要取1或者2颗使石子一直保持3的倍数,直到只剩下1或2颗
此时后手获胜
所以,只要n是3的倍数则Frame获胜
否则Alan获胜
#include<iostream> #include<cmath> using namespace std; int main(){ int t; cin>>t; while(t--){ int n; cin>>n; if(n%3==0){ cout<<"Frame"<<endl; } else{ cout<<"Alan"<<endl; } } }