蓝桥杯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;
}
二人轮流取硬币。
每人每次只能从某一堆上取任意数量。
不能弃权。
取到最后一枚硬币的为赢家。
求先取硬币一方有无必胜的招法。
思路:根据尼姆的理论,若每组硬币数相异或的值为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;
}
相关文章推荐
- 蓝桥杯C语言培训4 数学知识的运用 例题5 一步之遥
- 蓝桥杯C语言培训4 数学知识的运用 例题1 奇怪的捐赠(进制转换)
- 蓝桥杯C语言培训4 数学知识的运用 例题2 天平称重
- 蓝桥杯C语言培训4 数学知识的运用 例题4 公约公倍
- 蓝桥杯C语言培训4 数学知识的运用 作业 求素数(素数的筛法)
- 蓝桥杯C语言培训1例题(2) 罗马数字(枚举法的应用)
- 蓝桥杯C语言培训1例题(3) 年龄谜题(枚举法的应用)
- 数学知识:和式的处理及二项式系数的运用
- 蓝桥杯C语言培训3 例题5 蚂蚁感冒(排序、判断、模拟)
- 蓝桥杯C语言培训3 典型问题的递归框架 例题1 排列枚举
- 四.数学知识的运用
- 数学知识在游戏中的运用
- 蓝桥杯C语言培训3 典型问题的递归框架 例题4 组合计数(元素可以相同)
- 蓝桥杯C语言培训2 递归原理与构造技巧 例题1 振兴中华
- 蓝桥杯C语言培训2 递归原理与构造技巧 例题3 算式填符号
- VC绘图/游戏简易教程--5:数学知识在绘图中的运用
- 蓝桥杯C语言培训1例题(1) 九宫幻方(枚举法的应用)
- 蓝桥杯C语言培训3 典型问题的递归框架 例题2 搭积木
- 蓝桥杯C语言培训2 递归原理与构造技巧 例题2 出栈顺序
- 蓝桥杯C语言培训3 典型问题的递归框架 例题3 组合计数(元素互不相同)