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)}')