python编程300例_经典编程100例——python版(例9例10)

最近事情比较多,python还在学习之中,更新速度慢了一些。今天就2例。

例9:一个数如果恰好等于它的因子之和,这个数就称为“完数”。如6=1+2+3.编程找出1000之内所有的完数并打印出来。

求解分析:关键就是把一个数的因子都找出来。取余为零,再加一个比较条件而已。利用了sum()来快速求和。

*列表真是好东西。

代码如下:

acb3d6adb4651a2d4ae6c375fd904817.png

测试结果:

044219414071f1593b74c382e987a70c.png

拓展:如果要求打印出

6=1+2+3

28=1+2+4+7+14

496=1+2+4+8+16+31+62+124+248

程序要怎么改?

——————————————————————————————————

例10:猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,只剩下一个桃子了。求第一天共摘了多少个?

求解分析:

天数1234
吃掉c1=s0/2+1c2=s1/2+1c3=s2/2+1c4=s3/2+1
剩下s0=ns1=s0-c1s2=s1-c2s3=s2-c3s4=s3-c4
天数56789
吃掉c5=s4/2+1c6=s5/2+1c7=s6/2+1c8=s7/2+1c9=s8/2+1
剩下s5=s4-c5s6=s5-c6s7=s6-c7s8=s7-c8s9=s8-c9=1

第九天吃完还剩下1个桃子,所以s9=1。

s8=2*(s9+1)=2*(1+1)=4

……

倒推上去,可以得到s0=2*(s1+1)

代码如下:

eb4cf496708e670883124e4d04bf929d.png

测试结果:

d27dc4994c15c1c0b7684c5786bf6c9d.png

拓展:看了求解分析,可以看出用递归算法肯定可以。你可以尝试写一下吗?欢迎交流。

编程能培养学生的思维,我没怀疑过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值