Day5 作业2

作者: 风月辞寒 | 来源:发表于2019-07-27 12:33 被阅读0次
    1.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
    p_h = 8*10**(-5)
    z_h = 8848.13
    n = 0
    while p_h <= z_h:
        n += 1
        p_h *= 2
    print(n)   # 27
    
    2. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    a, b = 0, 1
    mon = int(input('第几个月:'))
    for i in range(mon - 1):
        print(b * 2)
        a, b = b, a+b
    print('兔子总数为:', b*2)    # 兔子总数为: 110
    
    3. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
    num = int(input('输入正整数:'))
    new_num = 0
    n = 1
    while True:
        n += 1
        if num == n:
            print(n)
            break
        elif not num % n:
            print('%d * ' % n, end='')
            num /= n        # 输入正整数:90
            n = 1       # 2 * 3 * 3 * 5
    
    4. 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。
    m = int(input('输入第一个正整数:'))
    n = int(input('输入第二个正整数:'))
    mult = 1
    for num in range(m // 2 + 1, 1, -1):    # 公约数
        if not n % num and not m % num:
            print('最大公约数是:', num)
            break
    while True:     # 公倍数
        if not m * mult % n:
            print('最小公倍数为:', mult * m)
            break       # 输入6   9
        mult += 1       # 打印:最大公约数是: 3  最小公倍数为: 18
    
    5. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3. 编程 找出1000以内的所有完数
    for num in range(1, 1000):
        fac = []
        for n in range(1, num):
            if not num % n:
                fac.append(n)
        else:
            # sum1 = 0
            # for n in fac:
            #     sum1 += n
            # if num == sum1:
            #     print(num, end=' ')
            if num == sum(fac):
                print(num, end=' ')     # 6 28 496 
    
    6.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
    year = int(input('输入年:'))      # 四年一闰,百年不闰,四百年再闰
    month = int(input('输入月:'))
    day = int(input('输入日:'))
    days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if (not year % 4 and year % 100) or not year % 400:
        days[1] += 1
    print('这是%d年的%d天' % (year, day + sum(days[:month - 1])))
    # 输入年:2000   输入月:4   输入日:1   这是2000年的92天
    
    7. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
    phon = 1234
    new_p = 0
    for i in range(4, 0, -1):
        new_p += (phon % 10 + 5) % 10 * 10**(i-1)
        phon //= 10
    print('加密后:', new_p)        # 加密后: 9876
    
    8. 获取第n个丑数。 什么是丑数: 质因子只包含2,3,5的数

    6 =1* 2*3 -> 丑数

    2 = 1*2 -> 丑数

    7 = 1*7 -> 不是丑数

    1, 2, 3, 4, 5, 6, 8,9,10, 12 ….

    num = 1
    m = 0
    nums = []
    n = int(input('获取第几个丑数:'))
    while len(nums) < n:
        m = num
        while not m & 1:     # 除2
            m //= 2
        else:
            while not m % 5:     # 除5
                m //= 5
            else:
                while not m % 3:     # 除3
                    m //= 3
                if m == 1:      # 判断是否是丑数
                    nums.append(num)
        num += 1
    else:
        print('第%d个丑数是:' % n, nums[n-1])        # 取第20个丑数:36
    

    相关文章

      网友评论

        本文标题:Day5 作业2

        本文链接:https://www.haomeiwen.com/subject/vcasrctx.html