19.题目:一个数恰好等它的因子之和,这个数就称为“完数”。例如6 = 1+2+3 编程找出1000以内的所有完数。
自己想:首先因子的含义:若一整数能除尽另一整数,则前者是后者的因子。
自己写的代码:我直接把1000的所有因数找了出来 害 但是 关于题目的想法 我还没有想到 唯一想到的就是 咋这么难呢 根本想不出来呀
list = []
for i in range(1, 1000):
if 1000%i == 0:
list.append(i)
else:
pass
print(list)
自己又想了想 代码如下:
for i in range(1, 1001):
sum = 0
list = []
for j in range(1, i+1):
if i % j == 0:
sum += j
list.append(j)
if sum == i:
print(i)
print(list)
参考代码:
for i in range(1, 1001):
sum = 0
list = []
for j in range(1, i):
if i % j == 0:
sum += j
list.append(j)
if i == sum:
print(i)
print(list)
自己差在哪里:首先 是逻辑没有想出来,answer用了两个for循环:一个在1-1000之间遍历,属于总体遍历,满足题目条件在1-1000里面找, 第一个循环首先确立了限制条件在1-1000里面找 ;第二个循环在每个总体遍历的数中内部循环 属于验证的部分 验证我找的这个数 到底符不符合完数。第二次循环先判断是否能整除,如果可以就累加。还有一点需要注意的是:sum==0 的位置。
mogul点拨:sum 是每个数字的因子和,每个数字的因子和是相互独立的。双层的for循环,第一层依次尝试数字1到1000,第二层是在找寻找1-当前数字中,可能的因子 然后加在sum里面 所以要在第一层for循环里清空因子的和。
其次 编程技巧也差了: 如下图 :自己又写了一遍 也错了 。
重新尝试: