Day05_作业

1.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
a = 0.08 / 1000
count = 0
while a < 8848.13:
    a *= 2
    count += 1
print(count)
2. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
n = int(input('请输入月份:'))
num1 = 1
num2 = 1
if n <= 2:
    num = 1
    sum1 = num * 2
    print('第',n,'月的兔子数量为:',num,'对',sum1,'只')
else:
    for i in range(3,n+1):
        num = num1 + num2
        num1 = num2
        num2 = num
        sum1 = num * 2
    print('第',n,'月的兔子数量为:',num,'对',sum1,'只')
3. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
n = int(input('请输入一个正整数:'))
print(n,'=',end='')
while n > 1:
    for i in range(2,n+1):
        if n % i ==0:
            n = int(n / i)
            if n == 1:
                print(i,end='')
            else:
                print(i,'*',end='')
            break
4. 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。

辗转相除法:有a,b(a>b),求最大公约数。若a%b=0,则最大公约数为b;若a%b!=0…r1,继续用b%r1; 若b%r1=0,则最大公约数为r1;若b&rq!=0…r2,则继续用r1&r2,直到求得余数为0的那个除数;最小公倍数=两个数的乘积除最小公倍数=a * b / r

a = int(input('请输入一个正整数:'))
b = int(input('请再输入一个正整数:'))
if a < b:
    c = b
    b = a
    a = c
a1 = a
b1 = b
while True:
    if a % b == 0:
        print('最大公约数为:',b)
        break
    while a % b != 0:
            k = a
            a = b
            b = k % b
            break
d = int(a1 * b1 / b)
print('最小公倍数为:',d)
5.一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3. 编程 找出1000以内的所有完数

需注意,该题的因子是值这个数除自身以外的所有因子(包括1),并不是指乘积因子,如28 = 1+2+4+7+14

for i in range(2,1001):
    s = i
    for j in range(1,i):
        if i % j  ==0:
            s -= j
    if s == 0:
        print(i)
6.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来, 然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
sum1 = 0
sum2 = 0
while True:
    year = int(input('请输入年份:'))
    month = int(input('请输入月份:'))
    day = int(input('请输入日期:'))
    months = [31,28,31,30,31,30,31,31,30,31,30,31]
    if month > 12 or day > 31:
        print('输入数据有误,请重新输入')
        break
    else:
        if (year % 4 ==0 and year % 100 != 0) or (year % 400 == 0):
            if month > 2:
                for i in range(0,month-1):
                    sum1 += months[i]
                sum2 = sum1 + day + 1
            if month <= 2:
                for i in range(0,month-1):
                    sum1 += months[i]
                sum2 = sum1 + day
        else:
            for i in range(0,month-1):
                sum1 += months[i]
            sum2 = sum1 + day
    print(year,'年',month,'月',day,'日','是当年第',sum2,'天')
    break
7. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换, 第二位和第三位交换。求输入的四位整数加密后的值

a b c d
(a+5)%10 (b+5)%10 (c+5)%10 (d+5)%10
(d+5)%10 (c+5)%10 (b+5)%10 (a+5)%10

n = int(input('请输入需要传递的数据:'))
# 取出每个数
n1 = n // 1000
n2 = n //100 % 10
n3 = n //10 % 10
n4 = n % 10
# 加密
a = (n1 + 5) % 10
b = (n2 + 5) % 10
c = (n3 + 5) % 10
d = (n4 + 5) % 10
print(d,c,b,a)

# 解密

n = int(input('请输入需要解密的数据:'))
# 取出每个数
n1 = n // 1000
n2 = n //100 % 10
n3 = n //10 % 10
n4 = n % 10

#解密
a = (n1 + 5) % 10
b = (n2 + 5) % 10
c = (n3 + 5) % 10
d = (n4 + 5) % 10
print(d,c,b,a)
8.获取第n个丑数。 什么是丑数: 因子只包含2,3,5的数
n = int(input('请输入想知道丑数的位数:'))
count = 0
i =1
while True:
    m = i
    while m % 2 ==0:
        m = m // 2
    while m % 3 ==0:
        m = m // 3
    while m % 5 ==0:
        m = m // 5
    if m == 1:
        count +=1

    if count == n:
        break
    i += 1
print(i)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1一张纸的厚度大约是0.08mm,对折多少次后能到达珠穆朗玛峰的高度(8838.13m) 2.古典问题:有一对兔子...
    PonesRyang阅读 1,121评论 0 0
  • 1. 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)? 2. 古典问题...
    我去买个橘子o阅读 1,522评论 0 0
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,023评论 0 2
  • 第一章数和数的运算 一概念 (一)整数 1整数的意义 自然数和0都是整数。 2自然数 我们在数物体的时候,用来表示...
    meychang阅读 7,678评论 0 5
  • 书籍:《生涯咨询》 标题:叙事咨询的意义与五大主题 故事使我们习得的人生经验得以沉淀,这些经验指引我们穿越迷雾。当...
    梁琪_ad60阅读 3,851评论 0 0

友情链接更多精彩内容