题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1724
闲来无事,MARSER准备和他的好同(ji)学(you)LJN玩个小游戏。
如图,两人把n(0<n<=10^12)个硬币排成一圈,每次玩家可以取1~2枚硬币,但所取的硬币必须连在一起。取完所有硬币的人获胜。当LJN先手,请你判断谁会胜利,分别输出“LJN win!!!”和Marser win!!!“”
一个数n
题目要求的字符串
465134
Marser win!!!
题目讲解:
这道题居然是一道博弈论的题目,虽然是三四年级小盆友们的奥数题罢了,我们画几个图来解释一下吧:
这是一个硬币:
我们设有4个硬币:,先手LJN先将硬币取走一个(如图所示),这时还剩下3个硬币,此时LJN获胜了,为什么?因为不论MARSER取走1个还是2个硬币,LJN都能取走剩下的2个或1个硬币,因此LJN获胜。
我们设有5个硬币:,先手LJN不取1个了,取走2个,这时还是剩下3个硬币,同上,LJN依然是赢家。
由这两个例子我们可以得出结论,n为硬币个数,如果n-1或者n-2可以被3整除(也就是mod 3 = 0),那么先手LJN获胜,相反假如不能被3整除,则后手MARSER获胜。
不难列出代码:
#include <iostream> using namespace std; int main(){ long long n; // 注意,是long long cin >> n; if (n - 1 % 3 == 0 || n - 2 % 3 == 0) cout << "LJN win!!!"; // 判断 else cout << "Marser win!!!"; }
感谢阅读,点个赞吧~