《Mathematical Olympiad——组合数学》——操作和游戏

这篇文章,我们开始对奥数中有关操作和游戏的问题进行分析和讨论,其实在信息学竞赛中涉及到的一些博弈问题(分析必胜策略)的问题(例如巴什博弈、尼姆博弈),本质上来讲,就是组合数学当中的组合游戏,并不是真正意义上的博弈论。

下面就让我们来看看,这蕴藏着“必胜策略”的组合游戏到底有着怎样的玄机。

问题一:两个人交替地在黑板上写从1~1000的自然数,第一个人在黑板上写的数是1,然后,在黑板上写的数要么是2a,要么是a+1,其中,a是已经写在黑板上的数,且在黑板已经写过的数不允许再写,首先在黑板上写下1000的人获胜,问:谁有获胜策略?

分析:首先我们应该考虑到,两个聪明的游戏者都不会去写500和999,而更重要的是,也不会去写501.为什么呢?500和999就不用说了,对于501,由于它是奇数,只能通过a+1来写出,也就是说,当且仅当黑板上有500这个数字,某个玩家才能写出501,但这显然是不合理的决策,通过500明明可以直接赢嘛,因此,我们考虑除1000、999、500、501四个数字以外的996个数字的构造情况。

我们可以看到,将996分为498组:(1,2)、(3、4)……,每当先手写下一个数字a,那么后手就写一个数字a+1,这样一来,两个聪明的决策者会依次写完这996个数字,而后手写完第996个数字,先手就必须在500、999当中选择其一(写不出501),必败。

时间: 2024-10-27 12:00:08

《Mathematical Olympiad——组合数学》——操作和游戏的相关文章

《Mathematical Olympiad——组合数学》——染色问题

恢复  继续关于<Mathematical Olympiad——组合数学>中问题的分析,这一篇文章将介绍有关染色的问题. 问题一: 将一些石头放入10行14列的矩形方格表内,允许在每个单元格内放入石头的数目多于1块,然后发现每一行每一列上均有奇数块石头.若将矩形方格表上的单元格相间地染为黑色和白色,证明:在黑色单元格上石头的数目共有偶数块. 分析:我们考虑利用反证法来完成证明.即黑色单元格上的石头数目共有奇数块. 我们先假设该矩形方格奇行奇列.偶行偶列是黑色,并设奇行奇列有k1个奇数个石子的格

《Mathematical Olympiad——组合数学》——计数

今天开始了对<Mathematical Olympiad>小丛书(组合.几何.代数.数论)的组合数学部分的学习.说来惭愧,身为一个大学生现在回头去做高中生玩的数学题去了……学习这套丛书嘛,当然是为了夯实一下数学底子,为了以后走更远的路打好基础.这套丛书的特点是从1往后一直排的习题集,目前个人比较喜欢以解决具体的题目为目的,然后在解题过程中去学习相关的理论和方法.因为这样让学习显得很有目的性,最重要的是,这种方法能够让人持续的做下去(起码是我).总之今天是个开始,希望在今后的岁月里能够坚持下来,

《Mathematical Olympiad——组合数学》——抽屉原理

抽屉原理可以说是组合数学中最简单易懂的一个原理了,其最简单最原始的一个表达形式:对于n本书放到n-1个抽屉中,保证每个抽屉都要有书,则必存在一个抽屉中有2本书.但是这个简单的原理在很多问题中都能够巧妙的应用到,融合将问题一步步抽象转化来接近抽屉原理的原始模型,是用好抽屉原理的关键. 问题一:两个半径相等的圆盘上各有一个内接正2n边形,每个正2n边形的顶点有一半染上黄色,一般染上蓝色,将这一个圆盘放在另一个圆盘上并使得两个正2n边形的顶点均重合,这样得到2n对顶点,如果一对顶点中两个重合的顶点颜色

A Mathematical Olympiad Primer Ch1

Introduction Proof: heart of BMO A completely convincing logical argument which underpins, and is the guarantee of . the truth of a mathematical statement. Prove: root 2 is not rational method 1 assume that m and n are positive integers -> at least o

防止UI穿透操作到游戏场景

#if UNITY_EDITOR || UNITY_STANDALONE_WIN if (EventSystem.current.IsPointerOverGameObject()) { return ; }#else if ((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)) { if (EventSystem.current.IsPointerOverGameObject(Input.Get

用MFC完成一个简单的猜数字游戏: 输入的四位数中,位置和数字都正确为A,数字相同而位置不同的为B。

最近学习了MFC一些比较基础的知识,所以打算通过做一个简单的数字游戏来理解MFC的流程并进一步熟悉其操作. 在这里,我做了一个猜数字的小游戏.第一步当然是设计主界面,先给大家展示一下游戏界面: 主界面: 从这个主界面可以看到,它包含标题,菜单栏,工具栏. 标题是给人一个认识,这是什么游戏,标题设置为:“猜数游戏”: 而菜单栏和工具栏才是游戏的核心,它要保证能够完成游戏的基本功能. 菜单栏和工具栏是对应的,包含了”start“,"help","restart"这三个菜

c语言实现的推箱子小游戏-1

本次游戏是个推箱子第一关最简单的小游戏 有详细注释,下面是做出来的游戏界面 游戏操作说明和功能说明: 按wasd控制小人的上下左右移动. 按 r 重新开始游戏 游戏开始有操作介绍 游戏结束有胜利提示 游戏原理分析 游戏开始时的星星个数 = 箱子在星星上的个数时 , 游戏胜利. 按 r 键重新开始游戏, 我们需要定义一个量 map_1[8][8] 来保存游戏初始时的界面, 操作时我们将其赋值给 map[8][8] 来进行操作,以便重新归位, 这里就用到了memcpy()函数. wasd 代表上下左

棋牌游戏服务器如何动态创建房间?

如何动态创建房间? 客户需要这个功能,我们给设计成VIP会员可创建房间,那么涉及这几个功能, 一接受客户端请求,服务器端NEW一个ROOM类,并ADD到RoomList 二设定EMPTY TIME OUT,自动销毁空房间, 三向客户端通知事件,ROOM ADD,ROOM DEL 接下来详细说说几个要点, 对ROOM LIST的操作,游戏服务器的逻辑执行一定要是单线程的, 不然你在这边进行ADD操作,那边在FOR EACH 查找操作,列表的长度这时改变了,就会产生异常 自动销毁空房间则是销毁非系统

361VC++1006四国军棋游戏程序

程序开发软件: VC++6.0    数据库: Sqlserver2000以上版本 客户端类的划分:   游戏基本类:负责处理游戏中一些完成基本功能的类,如处理声音类.处理动画图标,图形按钮等类,基本类的特点是被其他类在特定处所调用,并不动生成对象.   游戏框架类:负责处理游戏中客户端用于显示程序界面和绘制游戏界面以及显示用户信息和广告信息等处理任务.   游戏通信类:负责处理游戏中客户服务器之间的网络传输细节,从而在编程中不用考虑网络通信细节,达到客户和服务器之间的透明的效果.   游戏应用