ACM Nim游戏(组合博弈论)

来源:互联网 发布:淘宝联盟 旧版 编辑:程序博客网 时间:2024/05/17 09:13

对于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;}
原创粉丝点击