Day 5 前四天总结练习

水仙花数

水仙花数是各位立方和等于这个数本身的数 abc = a*a*a+b*b*b+c*c*c
例如 153 = 1*1*1 + 5*5*5 + 3*3*3

示例1
'''
找出100~999之间的所有水仙花数
'''
for num in range(100, 1000): # 遍历100到999
    low = num % 10 # 除10取余数是个位数
    mid = num // 10 % 10 # 除10取模 再除10取余数是十位数
    high = num // 100 # 除100取模 是百位数
    if num == low ** 3 + mid ** 3 + high ** 3: # 计算各个位数的立方和
        print(num) # 输出水仙花数

完美数

  完美数是除自身外其他所有因子的和正好等于这个数本身的数

  例如 6 = 1 + 2 + 3

               28 = 1 + 2 + 4 + 7 + 14

  示例2

'''
找出1~9999之间的所有完美数
第一种方案
1 遍历1-9999, 列表 range(1,10000)
2 假设当前遍历值n, 二次遍历1到 n的平方根+1
3 假设二次遍历值m, 判断m是不是n的因子(取余为0),如果是,计算因子m的加和
4 如果m是n的因子,当m大于1并且不是n的平方根时, 那么m*k = n, k是另外的一个因子,将k加和
5 二次遍历结束后,判断因子的加和是否等于n, 如果相等,则n是完美数
6 继续遍历1-9999
'''
import time
import math

start = time.perf_counter()
for num in range(1, 10000):
    sum = 0
    for factor in range(1, int(math.sqrt(num)) + 1):
        if num % factor == 0:
            sum += factor
            if 1 < factor != num / factor:
                sum += num / factor
    if sum == num:
        print(num)
end = time.perf_counter()
print("方案一 执行时间:", (end - start), "")

'''
第二种方案
'''
start2 = time.perf_counter()
for num in range(1, 10000):
    sum = 0
    for factor in range(1, num//2 + 2):
        if num % factor == 0:
            sum += factor
    if sum == num:
        print(num)
end2 = time.perf_counter()
print("方案二 执行时间:", (end2 - start2), "")

'''
1
6
28
496
8128
方案一 执行时间: 0.0710596 秒
1
6
28
496
8128
方案二 执行时间: 2.4442378 秒

通过比较上面两种不同的解决方案的执行时间 意识到优化程序的重要性
'''

 

百元百鸡

1只公鸡5元 1只母鸡3元 3只小鸡1元 用100元买100只鸡
问公鸡 母鸡 小鸡各有多少只?
示例3
'''
1 假设公鸡 x只,母鸡 y 只, 小鸡z 只
2 公鸡一只5元, 公鸡的数量必须在 0-19之间
3 母鸡一只3元, 母鸡的数量必须在 0-33之间
4 总共100只鸡, 小鸡的数量是100-x-y
5 总共花费100元,所以5x+3y+(100-x-y)/3 = 100
6 遍历x,y的取值范围,如果等式5成立,那么此次遍历的x,y,z就是购买的数量
'''
for x in range(0, 20):
    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))
'''
要理解程序背后的算法 - 穷举法
公鸡: 0只, 母鸡: 25只, 小鸡: 75只
公鸡: 4只, 母鸡: 18只, 小鸡: 78只
公鸡: 8只, 母鸡: 11只, 小鸡: 81只
公鸡: 12只, 母鸡: 4只, 小鸡: 84只
'''

 



 




 

posted @ 2019-05-24 09:58  bigX  阅读(249)  评论(0)    收藏  举报