7-1 求奇数分之一序列前N项和
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + … 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
输入样例:
23
输出样例:
sum = 2.549541
n = int(input())
lst = [1/(2*x-1) for x in range(1,n+1)]
print("sum = {0:.6f}".format(sum(lst)))
7-2 求平方与倒数序列的部分和
本题要求对两个正整数m和n(m≤n)编写程序,计算序列和

输入格式:
输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
输入样例:
5 10
输出样例:
sum = 355.845635
m,n = input().split()
m = int(m)
n = int(n)
lst = [x*x+1/x for x in range(m,n+1)]
print("sum = {0:.6f}".format(sum(lst)))
7-3 求交错序列前N项和
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+… 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,结果保留三位小数。
输入样例:
5
输出样例:
0.917
m = int(input())
lst = [x/(2*x-1)*(-1)**(x+1) for x in range(1,m+1)]
print("{0:.3f}".format(sum(lst)))
7-4 输出华氏-摄氏温度转换表
输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。
温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。
输入格式:
在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。
输出格式:
第一行输出:“fahr celsius”
接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。
若输入的范围不合法,则输出"Invalid."。
输入样例1:
32 35
输出样例1:
fahr celsius
32 0.0
34 1.1
输入样例2:
40 30
输出样例2:
Invalid.
m,n = input().split()
m = int(m)
n = int(n)
if m > n:
print('Invalid.')
else:
print('fahr celsius')
for i in range(m,n+1,2):
print('{0}{1:>6.1f}'.format(i,5*(i-32)/9))
7-5 判断素数
判断一个给定的正整数是否素数
输入格式:
输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于1000000 的需要判断的正整数
输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No
输入样例:
在这里给出一组输入。例如:
2
11
111
输出样例:
在这里给出相应的输出。例如:
Yes
No
n = int(input())
a = []
for i in range(n):
y = int(input())
a.append(y)
for m in range(0,n):
x = a[m]
for i in range(2,x):
if (x % i == 0) :
print("No")
break
else:
print("Yes")
7-6 求整数段和
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入格式:
输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。
输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。
输入样例:
-3 8
输出样例:
-3 -2 -1 0 1 2 3 4 5 6 7 8Sum = 30
a,b = input().split()
a = int(a)
b = int(b)
n = 0
m = 1
c=a if a>b else b
d=b if a>b else a
for x in range(d,c+1):
print('%5d' % x ,end= '\n' if m%5==0 or x == c else '')
n = n+x
m = m+1
print('Sum = {0}'.format(n))
7-7 换硬币
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
输入格式:
输入在一行中给出待换的零钱数额x∈(8,100)。
输出格式:
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
输入样例:
13
输出样例:
fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count = 4
x = int(input())
count = 0
for a in range(x//5,0,-1):
for b in range(x-a*5,0,-1):
for c in range(x-a*5-b*2+1,0,-1):
if 5*a + 2*b + c == x:
count += 1
print('fen5:{0}, fen2:{1}, fen1:{2}, total:{3}'.format(a,b,c,a+b+c))
print('count = {}'.format(count))
7-8 求矩阵的局部极大值
给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。
输入格式:
输入在第一行中给出矩阵A的行数M和列数N(3≤M,N≤20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。
输出格式:
每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。
输入样例1:
4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 1 1 1
输出样例1:
9 2 3
5 3 2
5 3 4
输入样例2:
3 5
1 1 1 1 1
9 3 9 9 1
1 5 3 5 1
输出样例2:
None 3 5
a,b = input().split()
a = int(a)
b = int(b)
lst = []
c = 0
for i in range(a):
y =list(input().split())
lst.append(y)
for m in range(1,a-1):
for n in range(1,b-1):
if int(lst[m][n]) > int(lst[m][n-1]) \
and int(lst[m][n]) > int(lst[m][n+1]) \
and int(lst[m][n]) > int(lst[m-1][n]) \
and int(lst[m][n]) > int(lst[m+1][n]):
print('{0} {1} {2}'.format(lst[m][n],m+1,n+1))
c += 1
if c == 0:
print('None {0} {1}'.format(a,b))
7-9 矩阵对角线求和(二维数组)
把数据输入到一个n×n的方阵中,输出该矩阵,并求它两条对角线上元素之和。
注意:如果主对角线和次对角线有相交元素,求和时相交元素只加一次。
输入格式:
先输入行数n(n不超过10)
再输入n×n个整数。
输出格式:
先以矩阵形式输出该方阵,每个数占3格
再输出sum = 和值。
输入样例1:
5
1 1 1 1 1
1 2 3 4 5
0 1 2 3 4
2 2 2 2 2
1 1 1 1 1
输出样例1:
1 1 1 1 1 1 2 3 4 5 0 1 2 3 4 2 2 2 2 2 1 1 1 1 1sum = 16
输入样例2:
4
1 2 3 4
5 6 7 8
1 1 1 1
6 6 6 6
输出样例2:
1 2 3 4 5 6 7 8 1 1 1 1 6 6 6 6sum = 32
a = input()
a = int(a)
lst = []
b = 0
c = 0
for i in range(a):
y =list(input().split())
lst.append(y)
for m in range(a):
for n in range(a):
print('{0:>3}'. format(int(lst[m][n])),end= '\n' if n == a-1 else '')
if (a - m - 1) != m :
b = b + int(lst[m][a-1-m]) + int(lst[m][m])
else :
b = b + int(lst[m][a-m-1])
print('sum = {}'.format(b))
7-10 杨辉三角
求杨辉三角的前n行数据。
输入格式:
输入n(n<10)值。
输出格式:
输出杨辉三角的前n行数据,每个数据占4列。
输入样例:
5
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
n = int(input())
m = []
a = 1
for i in range(n):
lst = [1]
for k in range(i):
lst.append(1) if k == i-1 else lst.append(0)
m.append(lst)
if i == 1:
continue
for j in range(1,i//2+1):
c = m[i-1][j-1]+m[i-1][j]
lst[j] = c
for h in range(1,j+1):
a = a * h
if a != i-j:
lst[-j-1] = c
for s in range(n):
for z in range(s+1):
print('{0:>4}'. format(int(m[s][z])),end= '\n' if z == s else '')
7-11 求误差小于输入值的e的近似值
自然常数e可以用级数1+1/1!+1/2!+⋯+1/n!来近似计算。ei代表前i项求和。输入误差范围error,当
ei+1-ei<error,则表示e的近似值满足误差范围。
输入格式:
在一行输入误差范围。
输出格式:
在一行输出e的近似值(保留6位小数)。
输入样例1:
在这里给出一组输入。例如:
0.01
输出样例1:
在这里给出相应的输出。例如:
2.716667
输入样例2:
在这里给出一组输入。例如:
0.000000001
输出样例2:
在这里给出相应的输出。例如:
2.718282
def e(m):
a = 1
c = 0
for n in range(1,m+1):
for b in range(1,n):
a = a*b
c = c +1/a
a = 1
return c
error = float(input())
i = 1
while e(i+1) - e(i) > error:
i = i + 1
print('{0:.6f}'.format(e(i+1)))
本文记录了Python初学者在学习过程中的7个算法实践,包括奇数倒数序列求和、平方与倒数序列部分和、交错序列求和等,涉及数值计算、温度转换、素数判断等基础编程问题。
3729

被折叠的 条评论
为什么被折叠?



