4-19作业集

1

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

h=1
count_0=0
while True:
    high_0=0.08*h
    if high_0<8848130:
        h*=2
        count_0+=1
    else:
        break
print(count_0)

2

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

a=b=1
month=10
for i in range(month-1):
    a,b=b,a+b
print(a)

3

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

input_data=120
print(str(input_data),'=',sep='',end='')
while True:
    for i in range(2,int(input_data**(1/2))+1):
        if input_data % i == 0:
            input_data//=i
            print(i,'x',sep='',end='')
            break
    else:
        break
print(input_data)

4

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

m,n=60,80
i=0
while True:
    i+=1
    if i%m==0 and i%n ==0:
        print(i)
        break
i=m
while True:
    if m%i==0 and n%i ==0:
        print(i)
        break
    i-=1

5

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

for m in range(1,1001):
    sum_0=1
    is_eq=m
    is_ss=True
    while is_ss:
        for i in range(2,int(m**(1/2))+1):
            if m % i == 0:
                m//=i
                sum_0+=i
                break
        else:
            is_ss=False
    sum_0+=m
    if is_eq==sum_0:
        print(sum_0)

6

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

year=2003
month=5
day=23
days=(month-1)*30+day
if ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0) and month>3:
    days+=1
print(days)

7

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

data=1234
a,b,c,d=data//1000,data//100%10,data//10%10,data%10
a,b,c,d=(a+5)%10,(b+5)%10,(c+5)%10,(d+5)%10
a,b,c,d=d,c,b,a
print(a*1000+b*100+c*10+d)

8

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

for x in range(2,30):
    count_1=0
    num=x
    while True:
        for i in range(2,int(x**(1/2))+1):
            if x % i == 0:
                x//=i
                if i!=2 and i!= 3 and i!= 5:
                    count_1+=1
                break
        else:
            if x!=2 and x!=3 and x!= 5 :
                count_1+=1
            break
    if count_1==0:
        print(num)

方法二

n=10
y=1
count_0=0
while True:
    y+=1
    x=y
    count_1=0
    while True:
        for i in range(2,int(x**(1/2))+1):
            if x % i == 0:
                x//=i
                if i!=2 and i!= 3 and i!= 5:
                    count_1+=1
                break
        else:
            if x!=2 and x!=3 and x!= 5 :
                count_1+=1
            break
    if count_1==0:
        count_0+=1
        print(y)
    if count_0>=n:
        print(y)
        break

你可能感兴趣的:(4-19作业集)