day5作业2

""" = = = HJR = = = """

第一题

"""
1.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
"""

thick = 0.08
n = 0
while True:
    n += 1
    thick *= 2
    if thick >=8848.13*10**3:
        print('最后高度为:',thick,'需要折叠%d次'%n)
        break

第二题

"""

  1. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
    小兔子长到第三个月后每个月又生一对兔子,
    假如兔子都不死,问每个月的兔子总数为多少?
    """

def F(n):
    if n == 1 or n == 2:
        return 1
    else:
        return F(n-1)+F(n-2)
print(F(6))

第三题

"""

  1. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
    """
def factor():
    count = 1
    while True:
        global num
        count += 1
        if num % count == 0:
            num = num//count
            print(count)
            factor()
num = int(input('输入一个数字'))
factor()

第四题

"""

  1. 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。
    """
n = int(input('输入一个数字'))
m = int(input('输入一个数字'))
mul = m*n
def factor():
    while True:
        global n,m
        i = n % m
        if i != 0:
            n = m
            m = i
        else:
            print('最大公约数为',m)
            print('最小公倍数为',mul/m)
            break
if n>=m:
    factor()
else:
    n,m = m,n
    factor()

第五题

"""

  1. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。
    例如6=1+2+3. 编程 找出1000以内的所有完数
    """
for num in range(1000):
    facs = [1]
    count = 1
    while count < num**0.5+1:
        count += 1
        if num % count == 0:
            facs.append(count)
            facs.append(num//count)
    facs = list(set(facs))
    if sum(facs) == num:
        print(num)

第六题

"""
6.输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,
特殊情况,闰年且输入月份大于3时需考虑多加一天。
"""

months = [0,31,28,31,30,31,30,31,31,30,31,30,31]
year = int(input('输入年份'))
month = int(input('输入月份'))
day = int(input('输入天数'))
sum1 = 0
for x in range(month):
    sum1 += months[x]
sum1 += day
if ((year % 4 == 0 and year %100 !=0) or year % 400 == 0) and month > 2:
    sum1 += 1
print(sum1)

第七题

"""

  1. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,
    加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,
    再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
    """
num = input('请输入四位整数')
nums = list(num)
for i in range(len(nums)):
    nums[i] = str((int(nums[i])+5)%10)
nums[0],nums[1],nums[2],nums[3] = nums[3],nums[2],nums[1],nums[0]
print(''.join(nums))

第八题

"""

  1. 获取第n个丑数。 什么是丑数: 因子只包含2,3,5的数

    6 =1* 2*3 -> 丑数

    2 = 1*2 -> 丑数

    7 = 1*7 -> 不是丑数

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

def factor():
    global num, facs
    count = 1

    while count <= num:
        count += 1
        if num % count == 0:
            num = num//count
            facs.append(count)
            factor()
import copy
num1 = 1
i = 1
n = int(input('你想知道第几个丑数呢?'))
while True:
    if n == 1:
        print('第1个丑数为:1')
        break
    num1 += 1
    num = copy.deepcopy(num1)
    facs = [1]
    factor()
    if max(facs) < 6:
        i += 1
    if i == n:
        print('第%d个丑数为:'%i,num1)
        break

你可能感兴趣的:(day5作业2)