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

liftword4个月前 (02-08)技术文章42

本栏目精选刊登题友有价值的解答,供大家学习交流之用,欢迎各位题友积极参与!任何时候在公众号中回复期数“第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 操作,感觉自己无所不能了。直到有一天遇到了凑数最优问题,看似很简单,但始终无法解决。凑数问题:在很多数值数据当中,不限制个数(或一些限制条...

先Mark后用!8分钟读懂 Python 性能优化

从本文总结了Python开发时,遇到的性能优化问题的定位和解决。概述:性能优化的原则——优化需要优化的部分。性能优化的一般步骤:首先,让你的程序跑起来结果一切正常。然后,运行这个结果正常的代码,看看它...

原理 + 代码|手把手教你用Python实现智能推荐算法

推荐系统将成为未来十年里最重要的变革,社会化网站将由推荐系统所驱动。 --- John Riedl明尼苏达大学教授前言智能推荐和泛的营销完全不同,后者是将产品卖给客户作为最终目标;而智能推荐是以“客户...

Python语言常用技巧汇总_python语言的常用语句

一、列表操作技巧列表推导式 # 传统循环 squares = [] for x in range(10): squares.append(x**2) # 列表推导...

Python学习笔记第一篇(2021年12月14日)——图像的位深度

下面是图片属性1、位深度是什么?位深度是指在记录数字图像的颜色时,计算机实际上是用每个像素需要的位深度来表示的。计算机之所以能够显示颜色,是采用了一种称作“位”( bit ) 的记数单位来记录所表示颜...

零基础学习Python,看完这10个案例,让你快速上手掌握Python语言

文章前言今天给大家分享十个Python入门级别的小案例。案例一:排列组合 要求: 将4个数字可能组成的所有互不相同且无重复数字的排列组合列出。 分析: 排列就好了 代码:案例二:阶梯求和 要求: 企业...