A Funny Game POJ - 2484 爱丽丝和鲍勃决定玩一个有趣的游戏。在游戏开始时,他们选择 n (1 <= n < = 106)硬币在一个圆圈中,图 1 显示。移动包括移除一个或两个相邻的硬币,使所有其他硬币保持不变。必须至少取出一枚硬币。玩家交替移动与爱丽丝开始。取出最后一枚硬币的玩家获胜。(最后一个移动的玩家获胜。如果你不能移动,你就输了。
图1
注意:对于 n > 3,我们使用 c1,c2,。,cn 表示硬币顺时针,如果爱丽丝删除 c2,那么 c1 和 c3 不相邻!(因为 c1 和 c3 之间有一个空位。 假设爱丽丝和鲍勃在比赛中都尽了最大的 努力。 您将编写一个程序,以确定谁将最终赢得游戏。 输入 有几个测试案例。每个测试案例只有一行,其中包含正整数 n (1 <= n <= 106)。案例之间没有空白线。带有单个 0 的行终止输入。 输出 对于每个测试案例,如果爱丽丝赢了游戏,输出"爱丽丝",否则输出"鲍勃"。 示例输入 1 2 3 0 样品输出 Alice Alice Bob 题意描述:多实例,每组给出硬币的数量,将这些硬币围成一个圈,Alice和Bob从中取硬币,每次可以取任意1个或者是相邻的2个,Alice先取,谁最后取完所有的硬币,输出谁的名字 解题思路:先从硬币数量为1开始画,发现当硬币数量小于等于2时,Alice必胜,当硬币数大于2时,不管是奇数个还是偶数个硬币,Bob必胜,当数量为偶数时,Alice取几个,Bob只需要取和Alice取的相同数量的硬币对称地方的硬币即可,当为奇数时,不管Alice怎么取,Bob只需将剩下的硬币变成可以对称的就行了。
#include<stdio.h>
int main(void)
{
int n;
while(~scanf("%d",&n))
{
if(n==0)
break;
else if(n>2)
printf("Bob\n");
else
printf("Alice\n");
}
return 0;
}
|