灵机一动 | 第116期 不报七(答案)

liftword5个月前 (02-08)技术文章49

本栏目精选刊登题友有价值的解答,供大家学习交流之用,欢迎各位题友积极参与!任何时候在公众号中回复期数“第116期”或题目名称“不报七”可查看本期问题及答案!

NO. 116

不报七

一队士兵排队报数。他们的长官在家族中排行第七,所以不让士兵们报“七”和所有带“七”的数字,因此6的后面是8,16后面是18,69的后面是80。最后一个士兵报的数是2048。总共有多少名士兵?

来源:Areteem魔法学园每日一题

问题分析解答

本期问题题友们的解答非常精彩,大家各显神通,给出了好几种解法,更有题友利用“九进制”来解,大获好评,请看“题友解答精选”。

题友解答精选

一、最简单的解法◎题友 @枯木的守望 的解答:

考虑1到1999和2000到2048两段。 1到1999,不含7的数有2×9×9×9-1=1457个(减1是去掉0); 2000到2048有49-5=44个。 综上,一共有1501个。

二、容斥原理◎题友 @Mr.胡xb Right的解答:

考虑0001到2048 找出不含7的数,记S为上面2048个数构成的集,A、B、C分别为S中个位、十位、百位上出现了数字7的集。则含7的数集可以用 A∪B∪C 表示,易知 |A|=205,|B|=200,|C|=200,|A∩B|=20,|B∩C|=20,|A∩C|=20,|A∩B∩C|=2,根据容斥原理 |A∪B∪C|=|A|+|B|+|C|-|A∩B|-|B∩C|-|A∩C|+|A∩B∩C|=547,故士兵数为2048547=1501。

◎题友 @毕盛的解答:

找出带7的数字个数就行。2000以后有5个,主要看之前的个数,这是个排列组合问题。百位数带7的个数:2×10×10=200;十位数带7的个数:2×10×10=200;个位数带7的个数:2×10×10=200;百十位数都带7的个数:2×10=20;百个位数都带7的个数:2×10=20;十个位数都带7的个数:2×10=20;百十个位数都带7的个数:2。那么2000之前所有带7的个数:200+200+200-20-20-20+2=542。士兵数目就是2048-542-5=1501。

三、进制法——最有创意的解法◎题友 @mathlu的解答:

进制换算。九进制里的标准符号系统A:“0,1,2,3,4,5,6,7,8”,用符号系统B:“0,1,2,3,4,5,6,8,9”表示。“2048”是在符号系统B下的表示,化成标准的符号系统A的表示是“2047”,而“2047”实际对应的十进制数是2*93+0*92+4*91+7*9o=1501,即实际的士兵数。该方法可以用于一般的情况。

四、分段计数法◎题友 @一只巴掌 的解答:

100以内有10+9=19个带7的数,1000以内有100+19*9=271个带7的数,2000以内有271*2=542个带7的数,余下48里有5个,总的带7的数有542+5=547个,故士兵数为2048—547=1501。

五、程序法(Python)◎题友 @Fred Liu 的解答:

python3.5.1 a = For i in range(1,2049): if str("7") in str(i): a.append(i) Print(2048-Len(a)) Output:1501

六、Excel法——最偷懒的方法◎题友 @阿拉丁神灯 的解答:

还有个偷懒的不用数学思维的方法:在excel中从1拉到2048,筛选文本不含7的,再看剩下数字多少个。

Excel截图

本期答案整理:子曰 编辑:子曰

感谢各位题友的积极参与,下期再见!

好玩的数学

微信号:mathfun

好玩的数学以数学学习为主题,以传播数学文化为己任,以激发学习者学习数学的兴趣为目标,分享有用的数学知识、有趣的数学故事、传奇的数学人物等,为你展现一个有趣、好玩、丰富多彩的数学世界。

相关文章

面对2000笔金额记录的凑数最优问题,你学了python竟然束手无策?

好不容易学了一门编程语言 Python,又懂一点 Excel 操作,感觉自己无所不能了。直到有一天遇到了凑数最优问题,看似很简单,但始终无法解决。凑数问题:在很多数值数据当中,不限制个数(或一些限制条...

python算法基础之回溯_python 回测代码

回溯法定义回溯法是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条...

用Python制作炫酷的专属二维码_python简单二维码生成代码

点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍,小窗口回复“资源”、“测试工具包”领取测试资源。本文5586字,阅读约需14分钟Hi,大家好。在此之前介绍过二维码如何测试:你...

Python标准库及第三方库4-itertools模块

前言这次分享的主题是Python内置的itertools模块,它能够帮助开发人员更快速地实现迭代器。在之前的章节中,我们介绍过Python可迭代对象、迭代器以及二者的区别联系,先来简单回顾一下:1.可...

使用 mergekit将Qwen 与 Sailor整合,能否做出一个语言全才?

在看了MergeKit的介绍,并进行了一些研究,详情请见:北方的郎:手撕大模型:MergeKit,开源模型合并工具,排列组合提升大模型性能北方的郎:手撕大模型案例:使用 mergekit 合并大型语言...

世界是你们的,也是我们的,但终究是程序员的

这是一份简洁与繁复交织的工作。/ upsplash我做过最大的错事,就是低估了程序员这个群体。世界上的第一个程序员,竟然是个美女。Ada Lovelace,著名诗人拜伦的女儿,1842年,她设计出了世...