对于nim游戏的某个位置(x1,x2,x3),当且仅当它各部分的nim-sum等于0时(即x1⊕x2⊕x3=0),则当前位于必败点。
#include <stdio.h>
#include <string.h>
int m[101];
int main()
{
int i,sum,n,num;
while(1)
{
scanf("%d",&n);
if(n==0) break;
memset(m,0,sizeof(m)); //初始化,把0的低字节复制到指向的数组的前sizeof(m)个字节处,返回m指针
sum=0;
for(i=0; i<n; i++)
scanf("%d",&m[i]); //输入
num=m[0]; //将第一个值赋予num
for(i=1; i<n; i++)
num=num^m[i];//层层进行异或运算
if(num==0)
{
printf("0\n");//必败点:对于nim游戏的某个位置(x1,x2,x3),当且仅当它各部分的nim-sum等于0时(即x1⊕x2⊕x3=0)
continue;
}
for(i=0; i<n; i++)
if((num^m[i])<m[i])
sum+=1; //最终结果与各个数异或小于该数则可能性加1
printf("%d\n",sum);
}
return 0;
}