python解题_Python解题记录第19题

【本文结构】题目信息:来源、地址、序号、描述

题目答案:简要分析,程序代码(测试运行通过,含注释),运行结果

霍霍磨刀:解答这道题目之前应掌握的知识基础

解析过程:题目类型,分析以及实践过程

斩获成果:通过解答这道题目之后的知识提升

下一题预告:来源、地址、序号、描述

【题目信息】

来源:菜鸟教程

序号:19

描述:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数

【题目答案】

程序代码:

from sys import stdout # 引入sys库中的stdout函数

for j in range(2, 1001): # 循环2到1000

k = [] # 定义列表k

n = -1 # 定义变量n,并赋初值-1

s = j # 定义变量s,并赋初值为j

for i in range(1, j): # 循环1到j之间

if j % i == 0: # 如果j取余i为0,表示能整除

n += 1 #n加1

s -= i # s减去i

k.append(i) # 将i放到k列表中

if s == 0: # 判断s是否为0

print(j) # 输出j

for i in range(n): # 循环n

stdout.write(str(k[i])) # 输出列表k中的每个值

stdout.write(' ') # 输出空格

print(k[n]) # 输出最后一个值

运行结果:

6

1 2 3

28

1 2 4 7 14

496

1 2 4 8 16 31 62 124 248

【霍霍磨刀】

在解答这道题目之前,你首先应具备以下知识基础:已掌握Python 练习实例12的解法

【解析过程】

题型:{语法实践题}

对于这道题目,我一般都是从简单入手,把题目分解成多步,并逐步解决

首先,我们应该了解什么是完数,由题可知,一个数如果恰好等于它的因子之和,这个数就称为"完数"

比如6就是完数,因为它的因子是1,2,3,加起来就是6

比如8不是完数,它的因子是1,2,4,加起来是7,不相等,所以不是

比如9不是完数,它的因子是1,3,加起来是4,不相等,所以不是

可能会觉得是废话,就是把题目复述了一遍,但其实不然,这是切题,也是熟悉题目

其次,我们要了解如何求因子,所谓因子,就是能整除,也就是余数为0,也就是取余为0,我写了一段小代码,代码如下:

# 如何找出一个数的因子

n=int(input("请输入一个数:")) # 输入一个数

for i in range(1,n): # 循环1到该数之间

if n % i ==0: #如果取余为0

print(i) # 那么该数就是因子

然后,判断该数是不是完数,有两种方法

一种是在找出因子的同时,该数减去因子,如果最后结果为0,那么该数是完数,代码如下:

for i in range(1,1001):

s=i

for j in range(1,i):

if i%j==0:

s-=j

if s==0:

print(i)

另外一种是求出所有因子,然后相加并与原数比较,相等则为完数,

for i in range(1,1001):

xlist=[]

for j in range(1,i//2+1):

if i % j==0:

xlist.append(j)

if sum(xlist)==i:

print(i)

print(xlist)

解答完毕,两个答案均可

比较:上述两段程序中,内循环的上限范围一个是i,一个是i//2+1,有什么差别,为什么要这么做?

答案:可以减少内循环次数,提高程序效率。上述两段程序中,第二个程序除了可以输出完数外,还可以输出该完数的因子,你能修改第一段程序,也输出完数的因子吗?答案:可以,参考最上面的答案

【斩获成果】

通过本题的解答,我们如何了如何用两种思路去解决求完数,这题其实和前面的第12题、第14题类似,我一般把它们归结为“在一定范围内找符合条件的数”

解答这类题,一般都是外循环控制范围,内循环控制条件,设置一个标记用来判断以及输出。

解答这类题,首先就是要能看懂题目,其次才是套用格式。

举一反三,抛出问题:找出1到10000以内的素数

找出1到1000以内的水仙花数

【下一题预告】

来源:菜鸟教程

序号:20

描述:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值