python刷题
题目:第4章-5 求e的近似值 (15 分)
自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。
输入格式:
输入第一行中给出非负整数 n(≤1000)。
输出格式:
在一行中输出部分和的值,保留小数点后八位。
输入样例:
10
输出样例:
2.71828180
一、代码
n=int(input())
sum=1
mu=1
for i in range(1,n+1):
mu*=i;
sum += 1 / mu;
print("{:.8f}".format(sum))
注意:0 和 3 这两个点是通不过的,不用去管
二、心得
题目:第4章-6 输出前 n 个Fibonacci数 (15 分)
本题要求编写程序,输出菲波那契(Fibonacci)数列的前N项,每行输出5个,题目保证输出结果在长整型范围内。Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,例如:1,1,2,3,5,8,13,…。
输入格式:
输入在一行中给出一个整数N(1≤N≤46)。
输出格式:
输出前N个Fibonacci数,每个数占11位,每行输出5个。如果最后一行输出的个数不到5个,也需要换行。
如果N小于1,则输出"Invalid."
输入样例1:
7
输出样例1:
1 1 2 3 5 8 13
输入样例2:
0
输出样例2:
Invalid.
一、代码
def Fibonacci(m):
first=1 # 第一个数
middle=1 # 第二个数
last=0 # 最后一个
if m==0: # n=0情况
print("Invalid.")
return 0
if m==1: # n=1情况
print("{:>11}".format(1)) # {:>11} 右对齐,且总共占据不超过11个
return 0
else: # 剩下的所有情况
print("{:>11}{:>11}".format(1,1),end="")
time=2 # 计数器,用于判断是否过段。2开始,因为前面有先输出两个
for i in range(1,m-1): # 范围需要减去前面两个特殊的位置
last+=first+middle # 求相邻两数和
first=middle # 交换
middle=last # 交换
print("{:>11}".format(last),end="")
last=0 # 将最后一个数置零
time+=1 # 计数器+1
if time==5: # 判断过段
time=0 # 重新置零计算
print()
n=int(input())
Fibonacci(n)
二、心得
1.需要了解Fibonacci的基本实现思想
1 1 2 3 5 8…
2.指定输出格式可以通过format() 函数实现
"{:>11}".format(a) 右对齐
“{:<11}”.format(a) 左对齐
“{:^11}”.format(a) 中间对齐
注意**{}**内的 : 别漏掉了。
题目:第4章-7 统计学生平均成绩与及格人数 (15 分)
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
输入格式:
输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。
输出格式:
按照以下格式输出:
average = 成绩均值 count = 及格人数 其中平均值精确到小数点后一位。
输入样例:
5 77 54 92 73 60
输出样例:
average = 71.2 count = 4
一、代码
n=int(input())
if n<=0:
print("average = 0.0")
print("count = 0")
exit(0) # 测试第3点:非零返回
lst=list(map(int,input().split()))
nums=0
nums=sum(lst)/n
number=0
for i in lst:
if i>=60:
number+=1
print("average = {:.1f}".format(nums))
print("count = {}".format(number))
二、心得
1.n个输入,可以通过list(map(int,input().split()))
实现
2.exit(0) 解决非零返回
题目:第4章-8 求分数序列前N项和 (15 分)
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
20
输出样例:
32.66
一、代码
N=int(input())
sum=0
fz,fm=2,1
for i in range(1,N+1):
sum+=fz/fm
t=fm
fm=fz
fz=t+fz
print("{:.2f}".format(sum))
二、心得
用t做中间量存fm的值