题目:http://poj.org/problem?id=2484
题意:n枚硬币排成圈,两人轮流从中取一枚或者两枚硬币。取两枚时,必须取连续的两枚。硬币取走之后留下空位,相隔空位视为不连续。取走最后一枚硬币者获胜。问谁会获胜。
Sample Input
1
2
3
0
Sample Output
Alice
Alice
Bob
代码不难,但是需要动脑子。
这么想,n个硬币排成环,A取一次之后变成了链,B再去一次使这个链成为两条相同的链,那么A再取,B采取与A相同的方法,那么A取完一条链,B就一定取完另一条链,就是说B必胜。
所以代码很简单
#include<cstdio>
int main()
{
int n;
while(scanf("%d",&n)!=EOF && n)
{
if(n<=2)printf("Alice\n");
else printf("Bob\n");
}
return 0;
}
可见博弈的时候,与对手采取相同的策略也是一种很好的思考问题的方法