单击题目,直接跳转到页面刷题,一周后公布答案。
- P5722:数列求和
- B2054:求平均年龄
- B2059:奇数求和
- B2064:斐波那契数列
- B2077:角谷猜想
- B2098:整数去重
- B2128:素数个数
1. P5722:数列求和
题目描述
计算 1 + 2 + 3 + ⋯ + ( n − 1 ) + n 1+2+3+\cdots+(n-1)+n 1+2+3+⋯+(n−1)+n 的值,其中正整数 n n n 不大于 100。由于你没有高斯聪明,所以你不被允许使用等差数列求和公式直接求出答案。
输入格式
输入一个正整数 n n n。
输出格式
输出一个正整数,表示最后求和的答案。
样例 1
样例输入 1
100
样例输出 1
5050
提示
数据保证, 1 ≤ n ≤ 100 1 \leq n \leq 100 1≤n≤100。
参考源码1:
n = int(input())
i = 1
sum = 0
while i <= n:sum += ii += 1
print(sum)
参考源码2:
n = int(input())
i = 1
sum = 0
while True:if i > n:breaksum += ii += 1
print(sum)
参考源码3:
n = int(input())
sum = 0
for i in range(1, n+1):sum += i
print(sum)
2. B2054:求平均年龄
题目描述
班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。
输入格式
第一行有一个整数 n n n( 1 ≤ n ≤ 100 1 \le n \le 100 1≤n≤100),表示学生的人数。其后 n n n 行每行有 1 1 1 个整数,表示每个学生的年龄,取值为 15 15 15 到 25 25 25。
输出格式
输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。
样例 1
样例输入 1
2
18
17
样例输出 1
17.50
参考源码:
n = int(input())
sum = 0
for i in range(n):x = int(input())sum += x
avg = sum / n
print(f'{avg:.2f}')
3. B2059:奇数求和
题目描述
计算非负整数 m m m 到 n n n(包括 m m m 和 n n n)之间的所有奇数的和,其中, m m m 不大于 n n n,且 n n n 不大于 300 300 300。例如 m = 3 , n = 12 , m=3,n=12, m=3,n=12, 其和则为: 3 + 5 + 7 + 9 + 11 = 35 3+5+7+9+11=35 3+5+7+9+11=35。
输入格式
两个数 m m m 和 n n n,两个数以一个空格分开,其中 0 ≤ m ≤ n ≤ 300 0 \le m \le n \le 300 0≤m≤n≤300。
输出格式
输出一行,包含一个整数,表示 m m m 到 n n n(包括 m m m 和 n n n)之间的所有奇数的和。
样例 1
样例输入 1
7 15
样例输出 1
55
参考源码1:
m, n = map(int, input().split())
sum = 0
for i in range(m, n+1):if i % 2: # 奇数求和sum += i
print(sum)
参考源码2:
m, n = map(int, input().split())
sum = 0
for i in range(m, n+1):if i % 2 == 0: # 偶数不求和continuesum += i
print(sum)
参考源码3:
m, n = map(int, input().split())
list1 = [x for x in range(m, n+1) if x % 2 == 1]
print(sum(list1))
4. B2064:斐波那契数列
题目描述
斐波那契数列是指这样的数列:数列的第一个和第二个数都为 1 1 1,接下来每个数都等于前面 2 2 2 个数之和。
给出一个正整数 a a a,要求斐波那契数列中第 a a a 个数是多少。
输入格式
第 1 1 1 行是测试数据的组数 n n n,后面跟着 n n n 行输入。每组测试数据占 1 1 1 行,包括一个正整数 a a a( 1 ≤ a ≤ 30 1 \le a \le 30 1≤a≤30)。
输出格式
输出有 n n n 行,每行输出对应一个输入。输出应是一个正整数,为斐波那契数列中第 a a a 个数的大小。
样例 1
样例输入 1
4
5
2
19
1
样例输出 1
5
1
4181
1
参考源码1:
n = int(input())
for i in range(n):k = int(input())s1 = 0 # 前一项s2 = 1 # 当前项for j in range(k-1):s1, s2 = s2, s1+s2# tmp = s1 + s2# s1 = s2# s2 = tmpprint(s2)
上述代码每次查询时,都要从头开始计算斐波那契数列的第k项,是不是太笨了?
本题中多次查询,查询的项不超过30,因此可以先求解出前30项,每次查询时直接输出即可。
参考源码2:
fib = [0, 1, 1]
for i in range(3, 31):fib.append(fib[i-1]+fib[i-2])
n = int(input())
for i in range(n):k = int(input())print(fib[k])
5. B2077:角谷猜想
题目描述
所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘 3 3 3 加 1 1 1,如果是偶数,则除以 2 2 2,得到的结果再按照上述规则重复处理,最终总能够得到 1 1 1。如,假定初始整数为 5 5 5,计算过程分别为 16 16 16 、 8 8 8 、 4 4 4 、 2 2 2 、 1 1 1。
程序要求输入一个整数,将经过处理得到 1 1 1 的过程输出来。
输入格式
一个正整数 N ( N ≤ 2 , 000 , 000 ) N(N \le 2,000,000) N(N≤2,000,000)。
输出格式
从输入整数到 1 1 1 的步骤,每一步为一行,每一部中描述计算过程。最后一行输出 End
。如果输入为 1 1 1,直接输出 End
。
样例 1
样例输入 1
5
样例输出 1
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End
参考源码:
n = int(input())
while n != 1:if n % 2 == 1:print(f'{n}*3+1={n*3+1}')n = n*3 + 1else:print(f'{n}/2={n//2}')n //= 2 # 注意!不能用/
print('End')
6. B2098:整数去重
题目描述
给定含有 n n n 个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。
输入格式
输入包含两行:
第一行包含一个正整数 n n n( 1 ≤ n ≤ 20000 1 \le n \le 20000 1≤n≤20000),表示第二行序列中数字的个数;
第二行包含 n n n 个整数,整数之间以一个空格分开。每个整数大于等于 10 10 10 、小于等于 100 100 100。
输出格式
输出只有一行,按照输入的顺序输出其中不重复的数字,整数之间用一个空格分开。
样例 1
样例输入 1
5
10 12 93 12 75
样例输出 1
10 12 93 75
参考源码:
n = int(input())
list1 = list(map(int, input().split()))
list2 = []
for x in list1:if list2.count(x) == 0:list2.append(x)
print(*list2)
注意:本题要求去重后按照输入顺序输出,使用set去重,set是无序的,无法保证该顺序。
7. B2128:素数个数
题目描述
编程求 2 2 2 ~ n ( n n(n n(n 为大于 2 2 2 的正整数)中有多少个素数。
输入格式
输入 n ( 2 ≤ n ≤ 50000 ) n(2 \le n \le 50000) n(2≤n≤50000)。
输出格式
素数个数。
样例 1
样例输入 1
10
样例输出 1
4
参考源码:
素数是指除了1和自身之外,没有其它因子。素数测试最简单的方法是试除法,如果一个整数x是素数,则x除以区间[2,sqrt(x)]的任一个整数,均不能整除,如果有一个能够整除,则x不是素数。
n = int(input())
cnt = 0
for i in range(2, n+1):flag = Truefor j in range(2, int(i**0.5) + 1):if i % j == 0:flag = Falsebreakif flag:cnt += 1
print(cnt)