美文网首页
April 20th_day05_homewrok2

April 20th_day05_homewrok2

作者: 3ae1c50960af | 来源:发表于2019-04-22 15:51 被阅读0次

    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

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