poj2484--A Funny Game

 题目大意:

  Alice和Bob决定玩一个游戏。游戏的规则如下:现在有N个硬币(1<=n<=10^6),将它们摆成一个圈。操作:每次Alice或Bob从这圈硬币中,取一个或两个初始相邻的硬币,取最后一个硬币的人胜利。

  注意:1.当n>3的时候,假设Alice拿走了标号为2的硬币,那么标号1的硬币和标号为3的硬币是彼此不相邻的。2.Alice和Bob都是足够聪明的小朋友。

解法:

  后手必胜如果是N为偶数,后手可以跟着先手同步操作。相当于全部硬币分为相等的两部分,先手取几个,后手就取几个,这样总有后手必胜。

  如果N是奇数,先手拿一个的时候,后手就将其中心对称的两个拿掉。先手拿两个的时候,后手就将其中心对称的一个拿掉。进行以上二选一的操作后,游戏便又成了N为偶数的情况。

  综上所述,除了N=1或N=2时,总有后手Bob胜出。

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int main()
 5 {
 6     int n;
 7     while(scanf("%d",&n)!=EOF)
 8     {
 9         if(n==0)break;
10         if(n==1||n==2)
11             cout<<"Alice"<<endl;
12         else
13             cout<<"Bob"<<endl;
14     }
15     return 0;
16 }
View Code

 

posted @ 2017-08-21 18:41  BK-Edwina  阅读(152)  评论(0编辑  收藏  举报