题意:
给定一个n×n的棋盘,一个石头被放在棋盘的左上角。他们轮流移动石头。每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的格子之前不能被访问过。谁不能移动石头了就算输。假如小明先移动石头,而且两个选手都以最优策略走步,问最后谁能赢?
题解:
对于n*n为偶数的棋盘肯定可以用二格骨牌覆盖,这样每次先手都是走骨牌的一端而后手就可以走另一端,故后手赢。对于n*n为奇数的棋盘先手走了一步剩下的棋盘就可以被覆盖了,后手面临和之前先手面临的情况一样,故先手赢。由于奇数的平方是奇数,偶数平方是偶数,所以只要对输入判断奇偶性就行了。
代码:
1 #include <cstdio> 2 int n; 3 int main(){ 4 while(1){scanf("%d",&n); if(!n)break; puts(n&1?"Bob":"Alice");} 5 return 0; 6 }
20160630