昊学昊思系列(一)——猫吃老鼠篇
第一章 一条直线 我们不妨把Tom编的号列出来: 所以说,Jerry必须站在64号位置上才能不被Tom吃掉。 练习一下:现在Tom抓了2000只老鼠,还是排成一排,从1号开始,吃一个隔一个,这样吃下去,那么最后剩下的老鼠的编号是多少? 拓展一下:现在Tom又抓了100只老鼠排成一排,很不幸,这次Jerry又被抓住了,这次Tom决定从1号开始,吃两个隔一个,这样吃下去,直到剩下的老鼠不足3个,那么这次Jerry该站在哪里呢? 总结结论:S只老鼠排成一排,Tom从1号开始,吃n-1个隔一个,这样循环吃下去,直到剩下的老鼠不到n个。假设A是不大于S且最接近S的n的乘方数,那么,剩下的老鼠编号是 实战应用:(第14届华杯赛决赛第3题)将七位数1357924重复写287次组成一个2009位数“13579241357924……”。删去新数中所有位于奇数位上的数字,按上述方法一直删下去直到剩下一个数字为止,则最后剩下的数字是________。 思考:假设S只老鼠排成一排,Tom从1号开始,吃m个隔n个,这样循环吃下去,直到剩下的老鼠不到m+n个,那么剩下的老鼠的编号是多少? |
第二章 一个圆圈
又有一天,Tom又抓了100只老鼠,很不幸,Jerry又被抓住了。这一次,Tom决定把老鼠排成一个圆,从1到100号编了号,从1号开始,隔一个吃一个,一圈一圈的吃下去,直到只剩下最后一个的时候就放掉。那么这一次,Jerry该站到哪个位置,才能保证不被Tom吃掉呢?
我们还是不妨从最简单的开始,寻找其规律
假设有2只老鼠,Tom保留1号,吃掉2号;即最后剩下1号。
假设有4只老鼠,Tom保留1号,吃掉2号,保留3号,吃掉4号;这时候回到了2只老鼠时的情况,保留1号,吃掉3号;即最后剩下1号。
假设有8只老鼠,同样的,第一圈,Tom吃掉2号、4号、6号、8号,保留1号、3号、5号、7号;这样就回到了4只老鼠时的情况,吃掉3号、7号,保留1号、5号;回到2只老鼠的情况,吃掉5号,保留1号;即最后剩下1号。
……
所以,我们可以看到,当有2n只老鼠的时候,从1号开始,保留一个吃掉一个,最后留下的一定是1号老鼠。
现在,我们有100只老鼠,又该怎么做呢?
我们可以考虑Tom吃掉一部分老鼠,直到剩下的老鼠变成2n个时,这时候下一个保留的老鼠一定会留到最后!
最接近100的2的乘方是64(26),那么Tom就需要先吃掉 100-64=36(个)
从1号开始,留一个吃一个,要吃掉36个,最后吃掉的是72号老鼠,此时保留的老鼠是73号!这就是我们想要得到的答案。
再多观察一些:根据我们的解题思路,列出我们的算式: (100-26)×2+1=73
可以观察到,式子中有很多关于2的因素存在,我们可以与二进制知识相结合:
(100-26):表示把100化成2进制后,把最高位的那个1去掉;
(100-26)×2+1:表示把100化成2进制后,把最高位的那个1去掉,剩下的部分左移一位,并在末位后补上1。
相当于:把n化成2进制后,最高位的1移到最低位,所得的数即为最后所剩的数。
拓展一下:Tom抓了99只老鼠,这一次,Tom决定把老鼠排成一个圆,从1到99号编了号,从1号开始,隔一个吃两个,一圈一圈的吃下去,直到只剩下最后一个的时候就放掉。那么这一次,最后哪只老鼠是幸运儿呢?
分析:同样的,我们可以发现,当有3只、9只……3n只老鼠时,最后留下的一定是1号老鼠!所以,我们同样是考虑Tom吃掉一部分老鼠,直到剩下的老鼠变成3n个时,这时候下一个保留的老鼠一定会留到最后。
所以,最接近99的3的乘方是81(34),要剩下81只老鼠,Tom需要先吃掉18÷2×3=27只老鼠,即最后被吃掉的老鼠的编号是 ,所以,最后幸运的老鼠是28号!
思考:如果Tom抓了100只老鼠,从1号开始,隔一个吃两个,一圈一圈的吃下去,最后剩下的会是几号呢?(注意:这时候,Tom无法在吃掉2n只老鼠后,剩下3m只老鼠)
终极拓展:(《第15届少年数学邀请赛赛前教程》第二章)圆周上放置有2009枚,按顺时针编号为1、2、3……2008和2009,首先取走2号棋子,然后按顺时针方向,每隔2枚棋子就取走1枚棋子,直到圆周上仅仅剩下2枚棋子为止。问:剩下2枚棋子的编号各是多少?
分析:这是大学计算机数据结构课程一类最经典的例题——约瑟夫问题,现在我们尝试用奥数的知识来解决这一类问题。
首先我们尝试使用上述方法,希望能找到一些圈数时最后能剩下两个不变的序号,很可惜这样失败了。
不过,我们在寻找化简规律的时候,也发现了下面的规律:
观察上表实验所得的数据,我们可以看到:总数为n时,最后剩下的两个数的序号恰好都比n-1时剩下两个数的序号多3!进位规律:当总数为n-1最后剩下数的序号为n-1时,总数为n则剩下数的序号为3;当总数为n-1最后剩下数的序号为n-2时,总数为n则剩下数的序号为1。
为什么会这样子呢?
总数为n的时候跟总数为n-1时相比,就相当于把n的第一个2去掉了,从5开始删去序号,此时就是总数为n-1时的情况!
n-1的情况: 2、3、4、5、……n- 3、n-2、n-1、1 ,圆从2开始,结束于1,共n-1个
n的情况: 5、6、7、8、……n-1、n、1、3、4 ,圆从5开始,结束于4,共n-1个
一个是从2开始删序号,一个是从5开始删序号,其序号之间的差正好是3,也就是为什么最终剩下的两个数的差是3。总数为n-1时如果最后留下序号n-1,对应的,总数为n最后留下序号3;总数为n-1时如果最后留下序号n-2,对应的,总数为n最后留下序号1。
最终,我们推出了当n=2009时,最后剩下的两个数633和1864
实战应用一:(第12届华杯赛总决赛二试第6题)圆周上放置有3000枚棋子,按顺时针依次编号为1、2、3、……、2999、3000。首先取走3号棋子,然后按顺时针方向,每隔2枚棋子就取走1枚棋子,……,直到1号棋子被取走为止。问:此时,(1)圆周上还有多少枚棋子?(2)在圆周剩下的棋子中,从编号最小一枚棋子开始数,第181枚棋子的编号是多少?
分析与解:(1)第一圈把能被3整除的棋子全部取走,即最后一圈最后取走编号为3000的,共1000枚,剩下2000枚,1为第一个。
再从这2000枚棋子中隔2个取走1个,第二圈最后取走的是2000枚中的第1998枚,共取走666枚,第1999枚、第2000枚都没被取走,所以,再取就取1号了。这时候共取走了1000+666+1=1667枚棋子,还剩下1333枚棋子。
(2)第一圈我们取走的数用红色表示,第二圈取走的数用蓝色表示。
1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、
19、20、21、22、23、24、25、26、27、28、29、30、31、32、33、34、35、36、……
可以看到每18个数一循环,取走10个,剩下8个。拿走1后,剩下的最小数是2,从开始第181枚,即从1开始的第182枚。182÷8=22……6,表示这个数在第22个循环里、剩下的第6个数。22×18=396,第22个循环为:
397、398、399、400、401、402、403、404、405、406、407、408、409、410、411、412、413、414
剩下的第6个数是407,该数即为所求棋子编号。
实战应用二:(第6届华杯赛总决赛二试第4题)圆周上放有N枚棋子,如图所示,B点的一枚棋子紧邻A点的棋子。小洪首先拿走B点处1枚棋子,然后顺时针每隔1枚拿走2枚棋子,连续转了10周,9次越过A。当将要10次越过A处棋子取走其它棋子时,小洪发现圆周上余下20多枚棋子。若N是14的倍数,请帮助小洪精确计算一下圆周上还有多少枚棋子?
分析与解:设圆周上余a枚棋子,从第9次越过A处拿走2枚棋子到第10次将要越过A处棋子时,圆周上还有3a枚棋子;
依次类推,在第8次将要越过A处棋子时,圆周上有32a枚棋子,……,
所以,在第一次将要越过A处棋子时,圆周上有39a枚棋子,
所以,在第一次将要越过A处棋子之前,小洪拿走了2(39a-1)+1枚棋子,所以N=310a-1,
而N=310a-1=59049a-1=7×8435a+4a-1是14的倍数,
当a是奇数时,N是2的倍数,
又20≤a≤30,验证有当a=23时,4a-1是7的倍数,即N是14的倍数。
作业练习
(第3届华杯赛总决赛一试第6题)在一个圆周上放了1枚黑色的和1990枚白色的围棋子,一个同学进行这样的操作:从黑子开始,按顺时针方向,每隔一枚,取走一枚。当他取到黑子时,圆周上还剩下多少枚白子?
昊学昊思系列(一)——猫吃老鼠篇相关推荐
- 利用Python+Cocos2d制作《猫吃老鼠》小游戏
碰撞检测也称冲突检测,是游戏程序中的一个非常重要的功能,用于检测游戏画面中的物体是否发生碰撞,进而可以采取相应的措施应对此碰撞.绝大多数的游戏引擎都提供了对碰撞检测的支持. 本篇我们将介绍Cocos2 ...
- Scratch(二十五):猫吃老鼠
哈喽,大家好.今天给大家展示的Scratch小游戏是猫吃老鼠,下面我们一起看一下效果吧. Scratch小游戏之猫吃老鼠 1.素材的获取 懒得找素材直接 滴滴,如下图所示. 2.'小猫的设置 当&qu ...
- java 猫 老鼠_Java面试题:猫吃老鼠问题
问题:现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号. 我的解法: 1.简单的方法就是模拟这个过程 ...
- Java面试题:猫吃老鼠问题
问题:现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号. 我的解法: 1.简单的方法就是模拟这个过程 ...
- 猫吃老鼠问题的链表实现
一.问题描述 现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号. 二.代码 #include ...
- 猫吃老鼠c语言,面试题目:猫吃老鼠问题的求解算法改进
一.问题描述 现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号. 二.代码说明 #include # ...
- 猫吃老鼠(解答数学题型)
#"猫"抓了几个"老鼠": a= b=0 c=1 if a==1: [Tab] print("题目错误!") else: [Tab] whi ...
- C实现猫吃老鼠问题。。。。。
有只猫抓了N只老鼠,抓来的老鼠把它排成一圈,数到第三只老鼠,吃掉,依次数下去,第三只都被吃掉,最后一只放生,若你是此老鼠,该站在哪个位置?puts(老鼠只数) #include "stdio ...
- 猫吃老鼠(数学题型解答)
#"猫"抓了几个"老鼠": a= b=0 c=1 if a==1: [Tab] print("题目错误!") else: [Tab] whi ...
最新文章
- linux diff 补丁文件夹,LINUX下制作补丁文件 diff,patch
- MongoDB 监测
- Vite+Vue3页面空白、图标不显示问题解决
- phpMailer 配置 企业邮局 163
- FreeSql (十五)查询数据
- Centos7配置本地yum安装源出现错误
- 电商页面设计吸睛大法|C4D背景素材模板,视觉之旅开启!
- android打包成apk会屏蔽注解,Android解决混淆打包之后注解被去掉的问题-Go语言中文社区...
- unity直播推流方式_【技术猩球】从方案架构分析秀场直播的四种实现方式
- php设计模式 -- 迭代器模式
- javaweb基于SSM开发在线问卷调查系统(前台+后台) 课程设计 毕业设计源码
- python现在版本强势英雄_用Python给漫威和DC英雄综合实力排位
- 包装严重的IT行业,作为面试官,我是如何甄别应聘者的包装程度
- 万里汇WorldFirst人民币提现,1天内到账,太快了!
- SV--随机约束(一)
- 简单记录双系统安装Ububtu22.04
- 11 java 王少飞-Java语言的主要特性分析
- Symbian S60系统祥解
- 阿里云被攻击用高防CDN的效果如何?
- UE4打包设置和步骤(打最小的包)
热门文章
- 漂亮,Spring Boot + Vue 实现的网易云QQ音乐
- 华为mate怎么升级鸿蒙系统,怎么升级鸿蒙系统?
- 史上最浅的ios面试题,重复了
- scroll滚动性能优化
- java多线程之线程本地数据ThreadLocal
- 问题解决:Failed to start etcd.service: Unit is masked.
- 【超好懂的比赛题解】HNCPC Multi-university Training Round3 比赛题解
- 中专升本科最快要几年 多久能毕业
- Uncaught (in promise)
- 园林和计算机学哪个,学园林设计用什么电脑