April 20th_day05_homewrok2

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

i = 0
thickness = 0.08/1000
while thickness < 8848.13:
    thickness = 0.08 / 1000
    thickness = thickness * 2 ** i
    i += 1
print("需要对折%d次,厚度为%.2f米"%(i-1,thickness))
"""
需要对折27次,厚度为10737.42米
"""

question2. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,

假如兔子都不死,问每个月的兔子总数为多少?

k = int(input("请输入您想看几个月的兔子:"))
array_1 = [1,1]
for x in range(2,k):
    array_1.append(array_1[x - 1] + array_1[x - 2])
print("兔子每月总数为:",end="")
for array in array_1:
    print(array,end=" ")
print("")
print("\n"*2)
"""
请输入您想看几个月的兔子:12
兔子每月总数为:1 1 2 3 5 8 13 21 34 55 89 144
"""

question3.将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5

import math
# 寻找所有素数函数
def find_primenumbers(i):
    list_of_primenubers = [2]
    q = 1
    k = 2
    while True:
        k += 1
        if q == i:
            break
        for x in range(2, int(math.sqrt(k)+1)):
            if k % x == 0:
                break
        else:
            list_of_primenubers.append(k)
            q += 1
    return list_of_primenubers
# find_primenumbers函数结束
# 单独查询第x位素数
def find_primenumber(i):
    q = 1
    k = 2
    while True:
        if q == i:
            return k
            break
        k += 1
        for x in range(2, int(math.sqrt(k)+1)):
            if k % x == 0:
                break
        else:
            q += 1
# find_primenumber函数结束
# 查询x是第几位素数
def find_primenumber2(i):
    x = 1
    while True:
        if i == find_primenumber(x):
            return x
            break
        elif i < find_primenumber(x):
            return
        x += 1
# find_primenumber函数结束
n = 1
while n == 1:  # 确保输入正整数大于1
    n = int(input("请输入一个大于1的整数:"))
x = 1
while True:
    if find_primenumber2(n):
        print("%d是一个质数"%n)
        exit()
    if find_primenumber(x) > int(math.sqrt(n)):
        break
    x += 1
list_of_primenumbers = find_primenumbers(x)
str_2 = ""
k = n
for primenumber in list_of_primenumbers:
    while k % primenumber == 0:
        str_2 = str_2 + "×" + str(primenumber)
        k = int(k/primenumber)
if k != 1:
    str_2 = str_2 + "×" + str(k)
str_2 = str_2[1:]
print("%d = %s"%(n,str_2))
print("\n"*2)
"""
请输入一个大于1的整数:3690
3690 = 2×3×3×5×41
"""

question4. 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。

m = int(input("请输入一个正整数m:"))
n = int(input("请输入一个正整数n:"))
if m >= n:
    num_min, num_max = n, m
else:
    num_min, num_max = m, n
while num_max % num_min != 0:
    num_max, num_min = num_min, num_max % num_min
print("%d和%d的最大公约数为:%d" % (m, n, num_min))
print("%d和%d的最小公倍数为:%d" % (m, n, (m * n)/num_min))
print("\n"*2)
"""
请输入一个正整数m:24
请输入一个正整数n:39
24和39的最大公约数为:3
24和39的最小公倍数为:312
"""

question5.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数

import math
for x in range(6,1001):
    num_1 = 1
    str_1 = "1"
    for i in range(2,int(math.sqrt(x))+1):
        if x % i == 0:
            num_1 = i + x/i + num_1
            str_1 = str_1 + "+" + str(i) + "+" + str(int(x/i))
    if x == num_1:
        print("%d是一个完数:%d=%s"%(x,x,str_1))
print("\n"*2)
"""
6是一个完数:6=1+2+3
28是一个完数:28=1+2+14+4+7
496是一个完数:496=1+2+248+4+124+8+62+16+31
"""

question6.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,

然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

"""
data_year = int(input("请输入年份:"))
data_month = int(input("请输入月份:"))
data_day = int(input("请输入日期:"))
data_sum_m = 0
list_data_everym = [31,28,31,30,31,30,31,31,30,31,30,31]  # 非闰年每月天数
if (data_year % 4 == 0 and data_year % 100 != 0) or data_year % 400 == 0:  # 判断是否为闰年,修改list_data_everym列表
    list_data_everym[1] = 29
for x in list_data_everym[:(data_month-1)]:  # 求和完整月份天数
    data_sum_m += x
print("您输入的日期为:%d年的第%d天"%(data_year,data_sum_m+data_day))
print("\n"*2)
"""
请输入年份:1992
请输入月份:12
请输入日期:18
您输入的日期为:1992年的第353天
"""

question7.某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值

code_num_1 = input("请输入需要加密的四位整数:")
code_num_2 = list(code_num_1)
for x in range(4):
    code_num_2[x] = ( int(code_num_2[x]) + 5 ) % 10
code_num_2[0],code_num_2[1],code_num_2[2],code_num_2[3] = code_num_2[3],code_num_2[2],code_num_2[1],code_num_2[0]
print("加密后的数字为:",end="")
for code in code_num_2[:]:
    print(code,end="")
print("\n"*2)
"""
请输入需要加密的四位整数:4865
加密后的数字为:0139
"""

question8.获取第n个丑数。

x = int(input("请输入您想获取第几位的丑数:"))
i = 0
num_1 = 1
while True:
    num_1 += 1
    n = num_1 / 2
    while (n % 1) == 0:
        n = n / 2
    n = n * 2 / 3
    while (n % 1) == 0:
        n = n / 3
    n = n * 3 / 5
    while (n % 1) == 0:
        n = n / 5
    n = n * 5
    if n == 1:
        i += 1
    if i == x:
        break
print("第%d位的丑数为:%d"%(x,num_1))
print("\n"*2)
"""
请输入您想获取第几位的丑数:12
第12位的丑数为:18
"""

你可能感兴趣的:(April 20th_day05_homewrok2)