day05-作业2

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

i=0
a=1
while True:
   a*=2
   i+=1
   if a*0.08>8848.13*1000:
       print(i-1)
       break

  1. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
n=int(input())
a=1
b=1
for x in range(n-2):
    a,b=b,a+b
print(b*2)
  1. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
def fun1(num):
    print('%d=' % num, end='')
    while num > 1:
        for i in range(2, num + 1):
            if num % i == 0:
                num = int(num / i)
                if num == 1:
                    print('%d' % i, end='')
                else:
                    print('%d*' % i, end='')
                break
    print()
fun1(90)
  1. 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。
def fun1(x,y,):
    if x > y:
        x,y=y,x
    for n in range(x,0,-1):
        if y%n==0 and x%n==0:
            print("最大公约数是%d"%n,end='')
            break
    print('最小公倍数是%d'%int(x*y/n))
fun1(6,4)
  1. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3. 编程 找出1000以内的所有完数
for num in range(1,1001):
    sum=0
    for x in range(1,num):
        if num%x == 0:
            sum+=x
    if sum == num:
        print("%d是一个完美数"%num)

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

def fun1(year,moth,day):
    day1=[31,28,31,30,31,30,31,31,30,31,30,31]
    sum=0
    if year%4==0 and year%100!=0 or year%400==0:
        for x in range(moth-1):
            sum+=day1[x]
        print("这天是这年的第%d天"%int(sum+1+day))
    else:
        for x in range(moth - 1):
            sum += day1[x]
        print("这天是这年的第%d天"%int(sum+day))

fun1(2019,2,17)
  1. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
def fun1(num):
  l=list(str(num))
  for x in range(len(l)):
      l[x] =(int(l[x]) + 5) % 10
  l[0],l[-1]=l[-1],l[0]
  l[1],l[2]=l[2],l[1]
  print(l)
fun1(1234)
  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 find_nun(k):
    count=0
    n=1
    while True:
        if isnum(n):
            count += 1
        if count == k:
            print('第%d个丑数是%d'%(k,n))
        else:
            n += 1
def isnum(n):
    while n%2==0:
        n/=2
    while n%3==0:
        n/=3
    while n%5==0:
        n/=5
    if n==1:
        return True
    else:
        return False

find_nun(8)

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