UVA_12299
首先分析简单的情况,数字代表最大堆,2必胜,3必输,4必胜,……其实偶数必胜是显然的,但奇数就不好说了,于是我们换个角度考虑。
如果说3必输的话,那么最后能把最大堆是3的情况留给Bob那么自己必然会赢,而能确保最大堆是3的情况就只有4、5、6了,而对于7,无论自己如何设置,都会把4、5、6其中的一个留给Bob,故自己必输。
同理,7必输的话,把7留给Bob就必胜,于是……
这样推完,其实Bob能赢的情况就是在n=2^k-1(k = 2, 3, 4,…)的时候,其他时候Alice都是必胜的。
#include<stdio.h>
int main()
{
int n;
for(;;)
{
scanf("%d", &n);
if(!n)
break;
++ n;
if((n & (n - 1)))
printf("Alice\n");
else
printf("Bob\n");
}
return 0;
}