April 20th_day05_homewrok2
2019-04-22 本文已影响0人
3ae1c50960af
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
"""