您的位置:首页 > 编程语言 > C语言/C++

蓝桥杯C语言培训4 数学知识的运用 例题3 尼姆堆

2018-03-15 22:56 375 查看
题目描述:有3堆硬币,分别是3,4,5
二人轮流取硬币。
每人每次只能从某一堆上取任意数量。
不能弃权。
取到最后一枚硬币的为赢家。

求先取硬币一方有无必胜的招法。
思路:根据尼姆的理论,若每组硬币数相异或的值为0,则先取硬币的人已经无法获胜,若不为0,则先取硬币的玩家必能找到一种策略获胜。

#include<stdio.h>

//"^"为异或符号

int main()
{
int a[3] = {3,4,5};
int sum = 0;
for(int i = 0 ; i < 3 ; i++)
{
sum ^= a[i];
}
if(sum == 0)
{
printf("defeat\n");
return 0;
}
for(int i = 0 ; i < 3 ; i++)
{
int x=sum ^ a[i];
if(x < a[i])printf("%d——>%d\n",a[i],x); //利用A^B^B = A,求出除了a[i]外的元素异或所得值
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: