python3每周一练

Week1

1、
【问题描述】有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子。假如兔子都不死,计算第n(n>=3)个月兔子的总数?
【样例输入】6
【样例输出】8
【问题分析】按月计算兔子的对数为,1,1,2,3,5,8,13,21,34......
可以运用递归来解决问题。如果当出生后第三个月开始生兔子: F(N) = f(n-1)+ f(n-2)
n个月就会生的全宇宙都是兔子。。。。

def f(n):
    if n <= 2:
        return 1
    elif n == 2:
        return 2
    return f(n-1) + f(n-2)


s = int(input())
print(f(s))

2、
【问题描述】用公式π/4≈1-1/3+1/5-1/7+..1/(2*N-1).求圆周率PI的近似值。
                    从键盘输入一个整数N值,利用上述公式计算出π的近似值,然后输出π值,保留小数后8位。
【样例输入】1000
【样例输出】3.14059265

li = []
for i in range(2, int(input())+1):
    li.append(1/(2*i-1))
for index, value in enumerate(li):
    if index % 2 == 0:
        li[index] = -value
print(round(4*(1+sum(li)), 8))

3、
【问题描述】编写一个程序,输入一个正整数N(N大于等于100小于等于999),求出100~N之间的所有水仙花数。所谓  的水仙花数是:如果一个三位数的个位数、十位数、百位数的立方和等于该数自身,就称这个数为水仙花数。
【输入形式】输入一个正整数N。
【输出形式】输出从100到N之间的所有水仙花数,每个数以回车结束。
【样例输入】
 400
【样例输出】
 153
 370
 371
【样例说明】输入一个的正整数400,输出为100~400之间的水仙花数153,370,371

li = [str(i) for i in range(101, int(input()))]
for items in li:
    if int(items) == pow(int(items[0]), 3) + pow(int(items[1]), 3) + pow(int(items[2]), 3):  # 咋优化这行代码呢
        print(int(items))
    else:
        pass

4、
【问题描述】分别统计标准输入中字母、数字字符个数。
【输入形式】从标准输入中读取一个字符串,可以包含任意字符。
【输出形式】分别输出字符串中字母(大小写字母都要进行统计)、数字个数,相邻数字之间用一个空格区分,输出末尾没有空格。

【样例输入】C Java -and- C++ are 3 lanuages. 2006-8-24 16:34
【样例输出】20 12
【样例说明】字符串中共有20个字母,12个数字,所以输出20 12

dic = {'alphas': 0, 'digits': 0}
s = input()
for i in s:
    if i.isalpha():
        dic['alphas'] += 1
    elif i.isdigit():
        dic['digits'] += 1
    else:
        pass
print(f"{dic['alphas']} {dic['digits']}")

5、
【问题描述】编写一个程序,用户输入若干整数,试找出其中的最大数和最小数。
【输入形式】用户在第一行待输入数据个数,在第二行输入数据。
【输出形式】程序在下一行输出数据的最大值和最小值
【样例输入】
 5
 89 62 96 74 52    
【样例输出】96 52
【样例说明】用户第一次输入的为数据个数,在下一行依次输入数据。输出为5个数中的最大值和最小值,输出时候两个数之间用空格分隔。

n = int(input())
li = []
for i in input().split():
    li.append(int(i))
    if len(li) == n:
        break
    else:
        print("数据个数错误!")
        exit()
print(f'{max(li)} {min(li)}')

6、

【问题描述】一个百万富翁碰到一个陌生人,陌生人找他谈了一个换钱的计划.该计划如下:我每天给你10万,而你第一天给我一元钱,第二天我仍给你十万,你给我二元钱,第三天我仍给你十万,你给我四元钱......你每天给我的钱是前一天的两倍,直到满n(0<=n<=30)天.百万富翁非常高兴,欣然接受了这个契约.请编写一个程序,计算这n天中,陌生人累计给了富翁多少钱,富翁累计给了陌生人多少钱.
【输入形式】输入天数n(0<=n<=30)
【输出形式】控制台输出.分行给出这n天中,陌生人所付出的钱和富翁所付出的钱.输出舍弃小数部分,取整.
【样例输入】30
【样例输出】3000000 1073741823
【样例说明】两人交易了30天,陌生人给了富翁3000000的钱(以元为单位).富翁给了陌生人1073741823元.

n = int(input())
strange = n*100000
li = [2**i for i in range(n)]
print(f'{strange} {sum(li)}')

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值