第一章 一条直线
有一天,Tom抓了100只老鼠,很不幸,Jerry也在其中。Tom决定把老鼠排成一条直线,从1到100号编了号,从1号开始,吃一个隔一个,从排头吃到排尾,下一轮继续从排头开始,直到只剩下最后一个的时候就放掉。那么Jerry该站到哪个位置,才能保证不被Tom吃掉呢?

我们不妨把Tom编的号列出来:
1        2        3        4        5        6        7        8        9        10        11        12        ……        95        96        97        98        99        100
第一次,从一号开始,吃一个隔一个,Tom吃掉了:
1、3、5、7、9、11、13……95、97、99,
可以看到,所有在奇数位的老鼠都被Tom吃掉了,还剩下:
2、4、6、8、10、12、14……94、96、98、100
位置上的老鼠,可以看到,留下的都是2的倍数。
同样的,
第二次留下的老鼠的编号是:4、8、12……92、96、100        留下的都是4(22)的倍数
第三次留下的老鼠的编号是:8、16、24……80、88、96        留下的都是8(23 )的倍数
第四次留下的老鼠的编号是:16、32、48、64、80、96        留下的都是16(24 )的倍数
第五次留下的老鼠的编号是:32、64、96                                留下的都是32(25 )的倍数
第六次留下的老鼠的编号是:64                                                留下的都是64(26 )的倍数

所以说,Jerry必须站在64号位置上才能不被Tom吃掉。
我们可以看到,按吃一个隔一个的这种吃法,最后留下的那只老鼠的位置是最接近老鼠只数的2的乘方数!

练习一下:现在Tom抓了2000只老鼠,还是排成一排,从1号开始,吃一个隔一个,这样吃下去,那么最后剩下的老鼠的编号是多少?
分析:按照我们所得到结论,比2000小的,最接近2000的2的乘方数是1024(210),所以最后留下的一定是编号为1024的老鼠。

拓展一下:现在Tom又抓了100只老鼠排成一排,很不幸,这次Jerry又被抓住了,这次Tom决定从1号开始,吃两个隔一个,这样吃下去,直到剩下的老鼠不足3个,那么这次Jerry该站在哪里呢?
分析:这次按照Jerry的吃法,第一次留下3、6、9……93、96、99,留下3的倍数,
第二次留下9、18、27……90、99,留下9(32)的倍数
……
按这样吃下去,最后留下的老鼠的位置是最接近老鼠只数的3的乘方数和2×最接近老鼠只数的3的乘方数
所以,这一次留下的老鼠的编号是81号(34

总结结论:S只老鼠排成一排,Tom从1号开始,吃n-1个隔一个,这样循环吃下去,直到剩下的老鼠不到n个。假设A是不大于S且最接近S的n的乘方数,那么,剩下的老鼠编号是
A、2A、3A……(n-2)A、(n-1)A

实战应用:(第14届华杯赛决赛第3题)将七位数1357924重复写287次组成一个2009位数“13579241357924……”。删去新数中所有位于奇数位上的数字,按上述方法一直删下去直到剩下一个数字为止,则最后剩下的数字是________。
分析与解:根据我们所得的结论,2009个数字,每次将奇数位的数字删去,那么最后剩下的数字在第1024( )位上。
而这串数字每七位一个循环,1024 ÷ 7 = 146 …… 2,表明第1024个数字在一个循环里第2个位置上,即为数字“3”,这里又综合周期问题的相关知识。

思考:假设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枚白色的围棋子,一个同学进行这样的操作:从黑子开始,按顺时针方向,每隔一枚,取走一枚。当他取到黑子时,圆周上还剩下多少枚白子?

昊学昊思系列(一)——猫吃老鼠篇相关推荐

  1. 利用Python+Cocos2d制作《猫吃老鼠》小游戏

    碰撞检测也称冲突检测,是游戏程序中的一个非常重要的功能,用于检测游戏画面中的物体是否发生碰撞,进而可以采取相应的措施应对此碰撞.绝大多数的游戏引擎都提供了对碰撞检测的支持. 本篇我们将介绍Cocos2 ...

  2. Scratch(二十五):猫吃老鼠

    哈喽,大家好.今天给大家展示的Scratch小游戏是猫吃老鼠,下面我们一起看一下效果吧. Scratch小游戏之猫吃老鼠 1.素材的获取 懒得找素材直接 滴滴,如下图所示. 2.'小猫的设置 当&qu ...

  3. java 猫 老鼠_Java面试题:猫吃老鼠问题

    问题:现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号. 我的解法: 1.简单的方法就是模拟这个过程 ...

  4. Java面试题:猫吃老鼠问题

    问题:现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号. 我的解法: 1.简单的方法就是模拟这个过程 ...

  5. 猫吃老鼠问题的链表实现

    一.问题描述     现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号. 二.代码 #include ...

  6. 猫吃老鼠c语言,面试题目:猫吃老鼠问题的求解算法改进

    一.问题描述 现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号. 二.代码说明 #include # ...

  7. 猫吃老鼠(解答数学题型)

    #"猫"抓了几个"老鼠": a= b=0 c=1 if a==1: [Tab] print("题目错误!") else: [Tab] whi ...

  8. C实现猫吃老鼠问题。。。。。

    有只猫抓了N只老鼠,抓来的老鼠把它排成一圈,数到第三只老鼠,吃掉,依次数下去,第三只都被吃掉,最后一只放生,若你是此老鼠,该站在哪个位置?puts(老鼠只数) #include "stdio ...

  9. 猫吃老鼠(数学题型解答)

    #"猫"抓了几个"老鼠": a= b=0 c=1 if a==1: [Tab] print("题目错误!") else: [Tab] whi ...

最新文章

  1. linux diff 补丁文件夹,LINUX下制作补丁文件 diff,patch
  2. MongoDB 监测
  3. Vite+Vue3页面空白、图标不显示问题解决
  4. phpMailer 配置 企业邮局 163
  5. FreeSql (十五)查询数据
  6. Centos7配置本地yum安装源出现错误
  7. 电商页面设计吸睛大法|C4D背景素材模板,视觉之旅开启!
  8. android打包成apk会屏蔽注解,Android解决混淆打包之后注解被去掉的问题-Go语言中文社区...
  9. unity直播推流方式_【技术猩球】从方案架构分析秀场直播的四种实现方式
  10. php设计模式 -- 迭代器模式
  11. javaweb基于SSM开发在线问卷调查系统(前台+后台) 课程设计 毕业设计源码
  12. python现在版本强势英雄_用Python给漫威和DC英雄综合实力排位
  13. 包装严重的IT行业,作为面试官,我是如何甄别应聘者的包装程度
  14. 万里汇WorldFirst人民币提现,1天内到账,太快了!
  15. SV--随机约束(一)
  16. 简单记录双系统安装Ububtu22.04
  17. 11 java 王少飞-Java语言的主要特性分析
  18. Symbian S60系统祥解
  19. 阿里云被攻击用高防CDN的效果如何?
  20. UE4打包设置和步骤(打最小的包)

热门文章

  1. 漂亮,Spring Boot + Vue 实现的网易云QQ音乐
  2. 华为mate怎么升级鸿蒙系统,怎么升级鸿蒙系统?
  3. 史上最浅的ios面试题,重复了
  4. scroll滚动性能优化
  5. java多线程之线程本地数据ThreadLocal
  6. 问题解决:Failed to start etcd.service: Unit is masked.
  7. 【超好懂的比赛题解】HNCPC Multi-university Training Round3 比赛题解
  8. 中专升本科最快要几年 多久能毕业
  9. Uncaught (in promise)
  10. 园林和计算机学哪个,学园林设计用什么电脑