nim博弈
有n堆若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最先取完着败。
分析:
对于n堆石子,一种情况是每堆都是1,那么谁输谁赢看堆数就知道;
对于不都是1的话,若这些堆是奇异局势,或者是非奇异局势,但非奇异局势皆可转换到奇异局势。
对于不都是1:初始给的是奇异局势的话,则先取者输;初始给的是非奇异局势的话,则先取者赢。
int main()
{
int i,n,a[101],ans,f;
while(scanf("%d",&n)!=EOF)
{
f=0;
ans=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
ans^=a[i];
if(a[i]>1)
f=1;
}
if(f==0)//都是1
{
if(n%2==0)
printf("先手必胜");
else
printf("后手必胜");
}
else
{
if(ans==0)//奇局势
printf("先手必败");
else
printf("先手必胜");
}
}
return 0;
}