Day05 - 总结与练习
练习
练习1:寻找“水仙花数”。
思路:水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数,首先是一个三位数,其次每一位数的三次方相加的和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
def narcissistic_number(num):
num_str = str(num)
num_length = len(num_str)
sum_num = 0
while num_length:
sum_num += int(num_str[num_length - 1]) ** num_length
num_length -= 1
else:
if sum_num == num:
print("%d is a %d bit narcissistic_number"%(num, num_length))
else:
pass
# print("%d is not a narcissistic_number"%num)
if __name__ == '__main__':
for num in range(100, 1000):
narcissistic_number(num)
练习2:寻找“完美数”。
思路:完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。如果一个数恰好等于它的因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。
def find_perfect_num():
for i in range(1, 1000):
s = 0
for j in range(1, i):
if i%j == 0:
s += j
if i == s:
print('%d is a perfect number'%s)
if __name__ == '__main__':
find_perfect_num()
练习3:“百鸡百钱”。
思路:求解《百钱百鸡》问题:1只公鸡5元 1只母鸡3元 3只小鸡1元 用100元买100只鸡。
问公鸡、母鸡、小鸡各有多少只?
计算式:3x+5y+(100-x-y)/3=100
def chicken_num():
# 公鸡5元每只,100元最多20只
for x in range (0, 20):
# 母鸡3元每只,100元最多33只
for y in range(0, 33):
# 算出小鸡数
z = 100 - x - y
if 5 * x + 3 * y + z / 3 == 100:
print('公鸡:%d只,母鸡:%d只,小鸡:%d只' %(x, y, z))
if __name__ == '__main__':
chicken_num()
练习4:生成“斐波那契数列”。
思路:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
从数列的第3项开始,每一项都等于前两项之和。
def fibonacci():
a = 0
b = 1
for _ in range(20):
a, b = b, a + b
print(a, end=" ")
if __name__ == '__main__':
fibonacci()