您的位置:首页 > 其它

POJ2975(Nim游戏)

2016-05-11 20:27 330 查看
典型的Nim游戏。

题意:给定n堆石子,求是否为必胜态;若是,则求出有多少种拿法。

a[]数组存数,所有数异或结果result与a[i]异或,若结果<a[i],则sum(情况数)++

例子:

有4堆石子,数量分别为:7 9 12 15

二进制形式为

0111

1001

1100

1111

异或结果为:1101

0111^1101=1010=10>7 舍去

1101^1001=0100=4 可以从第二堆拿走5个

1101^1100=0001=1 也可以从第三堆拿走11个

1101^1111=0010=2 或者从第4堆取走13个

代码:

#include<cstdio>

#include<string.h>

int main()

{

int n;

while(scanf("%d",&n)!=EOF&&n)

{

int a[1010],result=0,sum=0;

memset(a,0,sizeof(a));

for(int i=0;i<n;i++)

{

scanf("%d",&a[i]);

result=result^a[i];

}

for(int i=0;i<n;i++)

{

if((a[i]^result)<a[i])

sum++;

}

printf("%d\n",sum);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: