day05homework

  • 1.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
thickness = 0.08/1000
times = 0
while thickness < 8848:
    thickness *= 2
    times += 1
    # print(thickness,times)
print(times)
    1. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

分析
初始繁殖期的兔子0对, 2月龄0对, 1月龄0对,幼兔1对,
每过1个月,上月 2月龄兔子变为繁殖期兔,1月龄变为2月龄, 幼兔变为1月龄,繁殖期兔生下同等数量幼兔

n = 10 #第n个月
birthRabbt = 0
born2Monago = 0
born1Monago = 0
newRabbit = 1
for i in range(1, n+1):
    birthRabbt += born2Monago
    born2Monago, born1Monago = born1Monago, newRabbit
    newRabbit = birthRabbt
    rabbitPair = birthRabbt + born1Monago + born2Monago + newRabbit
    # print(rabbitPair)
print(rabbitPair)
    1. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
n = 18
print(n, '=', end=' ')
while True:
    #依次求出遍历比2到n-1的所有数,如果是因数则打印,且将整除该数,for循环结束,n值更新
    for x in range(2, n):
        if n % x == 0:
            # (用 / 除时 结果为float型)无法进入range()使用
            n = n // x
            print(x, end='x')
            break
    #当n本身是质数或 上一步倒除为质数时,循环完整运行结束。
    else:
        print(n)
        break
    1. 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。

碾除法:设两数为a、b(b<a),用b除a,得a=bq......r 1(0≤r)。若r1=0,则(a,b)=b;
若r1≠0,则再用r1除b,得b=r1q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r2除r1,……如此下去,直到能整除为止。最后一个非零余数即为(a,b)。

m = 8
n = 6
a, b = m, n
# 比较大小,并使a>b
if b > a:
    a, b = b, a
r = 1
# 根据碾除法定义 使用a除以b 如不整除,则用除数 除以 余数,直至整除 ,
# 则整除时的除数为最大公约数
while r :
    r = a % b
    a, b = b, r
# 最后一次整除时已将除数赋值给a,此时输出a最大公倍数
print(a)
# 最小公倍数为 a*b/最大公约数,(用 / 除时 结果为float型)
print(m * n // a)
    1. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3. 编程 找出1000以内的所有完数
for num in range(1, 1001):
    sum_factors = 0
    for i in range(1, num):
        if num % i == 0:
            sum_factors += i
    if sum_factors == num:
        print(sum_factors)
  • 6.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
year = 2013
month = 1
day = 2
#2,6,7月
if (month - 1) in [1, 5, 6]:
    days = (month - 1) * 30 + 1 + day
#3月
elif month == 3:
    days = 59 + day
#4,5月
elif month - 1 == 3 or month - 1 == 4:
    days = (month - 1) * 30 + day
#9,10月
elif month - 1 == 8 or month - 1 == 9:
    days = (month - 1) * 30 + 3 +  day
#11,12月
elif month - 1 == 10 or month - 1 == 11:
    days = (month - 1) * 30 + 4 +  day
#1月
elif month == 1:
    days = day
#9月
elif month == 8:
    days = (month - 1) * 30 + 2 +  day
#闰年3月以后加1天
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    if month >= 3:
        days += 1
    1. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
num = 3324
strNum = str(num)
newList = []
for i in range(4):
    newList.append((int(strNum[i]) + 5) % 10)
print(newList)
newList[0], newList[3] = newList[3], newList[0]
newList[1], newList[2] = newList[2], newList[1]
print(newList)

你可能感兴趣的:(day05homework)