3-8_Homework

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

count=0
hight=0.00008
while True:
    count+=1
    hight=hight*2
    if hight>8848.13:
        break
print(count)

2. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,

小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

# 规律:1,1,2,3,5,8,13,21......
#按照规律,可以发现,该现象满足斐波那契数列。故,写程序求斐波那契数列第N项值即可
a1=a2=1          #声明a1,a2的初始值为1
s=2                  #我们要输出的第N个斐波那契数列值,初始值设置为2
n=int(input('请输入您需要知道的第几个月兔子的总数:'))
count=2            #计数器,初始值为2
if n<=2:            #当输入n<=2时
    print(1)
else:                    #n>2时,进入循环
    while n>=3:
        s=a1+a2
        a1,a2=a2,s
        count+=1
        if count==n:          #当计数器值等于输入值是,跳出循环
            break
    print(s)

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

from math import sqrt
# n=int(input('请输入一个数'))
k=int(sqrt(num))
print(num,'=',end='',sep='')
while 1:
    for x in range(2,k-1):
        if num%x==0:
            num=int(num/x)
            print(x,'*',end='',sep='')
            break
    else:
        print(num)
        break

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

#求最大公约数
m=int(input('请输入正整数m:'))        #输入两个正整数
n=int(input('请输入正整数n:'))
# from math import max
# m=24
# n=16
M1=max(m,n)         #因为要使用辗转相除法,故选出m,n较大数和较小数
M2=min(m,n)
Y=M1%M2
S=m*n               #声明Y是较大数除以较小数的余数
# print(Y)
if Y==0:                #当Y为0时,输出最大公约数M2
    print(M2)

else:                   #当Y!=0时,进入循环
    while 1:
        M1=M2
        M2=Y
        Y=M1%M2
        if Y==0:
            break
    
print('最大公约数是:',M2)         #根据辗转相除法的运算过程,得知M2为最大公约数
  

# 求最小公倍数       最小公倍数=M1*M2/最大公约数
print('最小公倍数是:',S/M2)

5. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。

例如6=1+2+3. 编程 找出1000以内的所有完数。

# from math import sqrt
for x in range(1,1001):
    # num=int(sqrt(x))
    sum1=0
    for y in range(1,x):
        s=x%y
        if s==0:
            sum1+=y
        else:
            continue
    if x==sum1:
        print(x)

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

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

x=int(input('请输入年份:'))
y=int(input('请输入月份:'))
z=int(input('请输入日:'))
days=0
if x%4==0 and x%100!=0 or x%400==0:
    #闰年
    if y<=2:
        days=31*(y-1)+z
    elif y<=8:
        num1=int((y-3)/2+0.5)
        days=60+30*(y-3)+num1+z
    else:
        num2=(y-9)//2
        days=244+(y-9)*30+z+num2


else:
    if y<=2:
        days=31*(y-1)+z
    elif y<=8:
        num1=int((y-3)/2+0.5)
        days=59+30*(y-3)+num1+z
    else:
        num2=(y-9)//2
        days=243+(y-9)*30+z+num2
print(days)

7. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,

加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,

再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值

num=int(input('请输入一个四位数:'))
a=num//1000
b=num//100%10
c=num%100//10
d=num%10
a+=5
b+=5
c+=5
d+=5
a=a%10
b=b%10
c=c%10
d=d%10
a,d=d,a
b,c=c,b
num=a*1000+b*100+c*10+d
print(num)

你可能感兴趣的:(3-8_Homework)