趣学Python算法 - 读书笔记
文章平均质量分 72
本书集合了很多常见的基础谜题,在保持一定趣味性的同时又引入了Python的基础知识。但问哥对其中很多题目的Python解法也有自己的见解,于是开一个专栏进行列举,在组织顺序上与原书尽量保持一直,方便大家对照原书参考。
请叫我问哥
乱拳打死老师傅
展开
-
Python趣味算法入门 - 打鱼还是晒网
“三天打鱼两天晒网”总共是五天,也就是说五天一个循环,在循环里,头三天这个人在打鱼,后两天这个人在晒网,于是我们只要知道从1990年1月1日起到需要询问的某一天为止过去了多少天,用天数对5取余数,得到的结果分别去对应:0-打鱼、1-打鱼、2-打鱼、3-晒网、4-晒网,就能知道这个人在那一天是“打鱼”还是“晒网”。比如输入的月份是5,则要加上1、2、3、4,四个月的天数。循环最大到11,因为如果输入的月份是12,我们也无法把它看作整月,而如果输入的月份是1,我们只要加上整年的天数即可,所以12是不用检查的。原创 2022-11-08 10:00:00 · 956 阅读 · 0 评论 -
Python趣味算法入门 - 借书方案知多少
但是众所周知,Python的优点在于它的海量函数与模块,作为解释型的脚本语言,其不需要学习者过多地关注底层的C实现,于是,往往在C和其他语言中需要多条语句实现的功能,用Python的一句话就可以清晰明了地解决。这里我们可以用数字1到5表示第几本书,而可借的书是一个集合,所以,当A借走一本书后,B所能借的集合就是原有的集合减去A所借的书,所以这里可以使用集合的减法,生成一个新的集合。同理,当C借书的时候,可用的书的集合就是原来的集合减去A和B借走的书。可以预见,我们需要设定三层循环,用来模拟不同的借书场景。原创 2022-11-06 10:00:00 · 744 阅读 · 0 评论 -
Python趣味算法入门 - 百钱百鸡
因此,我们可以编写代码,仅仅对这个范围的cock数量进行穷举,数量大大减少,0、4、8、12,计算效率大大提高。如果使用计算机思维,因为数据量小(小于100),完全可以用穷举法,使用三层嵌套循环,从外向内分别代表公鸡、母鸡、小鸡的数量,然后依次判断三者的值是否同时满足上述两个方程。其实,当我们使用数学思维手动完成上面的计算后,得到的解(公鸡数量0、4、8、12)必然就是合理解了,无需再进行验证,由此可见,在这里使用代码反而显得画蛇添足、多此一举了。于是,cock的数量必须是4的整数倍,而且。原创 2022-11-05 10:00:00 · 13856 阅读 · 2 评论 -
Python趣味算法入门 - 牛顿迭代法求方程根
其中,a,b,c,d为方程的系数,x0为我们估算的初始值,这里可以使用原书中的1.5,也可以换成其他值,通常情况下,该值越接近最终解,迭代次数越少,最终解越精确,比如你可以试试1.1?题目中是求一元三次方程的根,为了快速介绍,下面简化成一元二次,因为原理都是一样的。以下图为例,坐标中的函数是。,系数a,b,c,d由主函数输入,求x在1附近的一个实根。,称作1阶导数,代表的是原方程式中对任意点做切线,该切线的斜率(计算方法)。,而我们要求70的平方根,相当于是在坐标中求当y=0时,x的取值。原创 2022-11-03 10:00:00 · 3798 阅读 · 1 评论 -
Python趣味算法入门 - 兔子产子(斐波那契数列的内在逻辑)
最后假设,这第一对子兔子也没有繁殖,那它们返回的应该是全为1的、长度为28的列表,但是我们最终是要得到的是每个月的总数,所以我们还是要把这个返回的列表里的数量加到祖兔子的列表里,所以我们需要遍历子兔子的列表,从祖兔子的列表第3个元素开始,依次累加。可以这样认为,递归函数代表了一对兔子,它们自出生那个月开始,每个月都存在,也就是说,如果是第一对兔子(祖兔子),不考虑后代的话,它们返回的应该是全为1的列表——代表30个月,每个月都有1对兔子。有一对兔子,从出生后的第3个月起每个月都生一对兔子。原创 2022-11-01 15:58:00 · 3657 阅读 · 2 评论 -
Python趣味算法入门 - 抓交通肇事犯 & 最佳存款方案
很自然地,我们可以根据条件3想到去遍历平方数是四位数的整数(条件1),然后判断这个平方数是否符合条件2,那么如何决定遍历区间呢?由条件1可以想到,四位整数的范围是1000到9999,而结合条件2,这个四位数的范围又可以缩小到1100到9988。另外,根据该应用的常识判断,应该是有唯一解(不然抓不了交通肇事犯),所以在代码找到符合条件的数字后,可以不用继续后面的运算,直接break返回。当然,换个角度,我们也可以先把所有符合条件2的4位数找出来,然后依次判断其是否是某一个整数的平方,从而找到答案。原创 2022-11-01 12:12:10 · 803 阅读 · 0 评论