涉及考试:计算机学会编程能力等级认证(GESP)、电子学会等级考试 活动内容:提供不同等级的真题供小朋友们选择练习 备考建议:根据自己备考的等级选择相应题目 附加价值:可作为白名单比赛的备考训练 本月打卡:本月GESP_Python打卡题目
【问题描述】
分数交错加减计算,形如:
(1)利用 input() 语句输入一个大于 1 的正整数;
(2)计算规则:分母为连续奇数,分子为 1,偶数位置相减,奇数位置相加,一直计算到最接近 N(含)的奇数分母为止;
(3)计算结果四舍五入保留 8 位小数,仅输出计算结果,没有其他。
【输入描述】
输入一个大于 1 的正整数,假设输入合规,不考虑不合规情景,如带小数点的数,负数等。
特别提示:常规程序中,输入时好习惯是有提示。考试时由于系统限定,输入时所有input()函数不可有提示信息。
【输出描述】
输出四舍五入保留 8 位小数。
特别提示:仅输出 8 位小数,没有其他。
【样例输入 1】
100【样例输出 1】
0.78039866【样例输入 2】
1000【样例输出 2】
0.78489816参考程序:
注意:仅供参考,考生可以自行设计,结果符合题意即可。
方法一:
N = int(input())i = 0s = 0j = 2 * i + 1while j <= N:if i % 2 == 0: s += 1 / jelse: s -= 1 / j i += 1 j = 2 * i + 1print(round(s, 8))方法二:
N = int(input())s = 0for i in range(1, N + 1, 2):if i % 4 == 1: s += 1 / ielif i % 4 == 3: s -= 1 / iprint(round(s, 8))方法三:
N = int(input())s = 0for i in range(1, N + 1, 4): s += 1 / ifor i in range(3, N + 1, 4): s -= 1 / iprint(round(s, 8))方法四:
N = int(input())s = 0for i in range(1, N + 1, 4): s += 1 / iif i + 2 <= N: s -= 1 / (i + 2)print(round(s, 8))【提交】
https://www.luogu.com.cn/problem/B4357
【问题描述】
对于正整数 ,如果 可以表为两个 的次幂之和,即 ( 均为非负整数),那么称 为幂和数。
给定正整数 ,请你求出满足 的整数 中有多少个幂和数。
【输入描述】
一行,两个正整数 ,含义如上。
【输出描述】
输出一行,一个整数,表示 之间幂和数的数量。
【样例输入1】
2 8【样例输出1】
6【样例输入2】
10 100【样例输出2】
20【数据范围】
对于所有测试点,保证 。
参考程序:
'''[GESP202506 二级] 幂和数https://www.luogu.com.cn/problem/B4357'''l, r = tuple(map(int, input().split()))x, cnt = 0, 0while2 ** x <= r: y = xwhile2 ** y <= r:if l <= 2 ** x + 2 ** y <= r: cnt += 1 y += 1 x += 1print(cnt)【提交】
https://www.luogu.com.cn/problem/B4414
【问题描述】
小 A 想制作 年每个月的日历。他希望你能编写一个程序,按照格式输出给定月份的日历。
具体来说,第一行需要输出 MON TUE WED THU FRI SAT SUN,分别表示星期一到星期日。接下来若干行中依次输出这个月所包含的日期,日期的个位需要和对应星期几的缩写最后一个字母对齐。例如, 年 月 日是星期一,在输出九月的日历时, 号的个位 就需要与星期一 MON 的最后一个字母 N 对齐。九月的日历输出效果如下:
MON TUE WED THU FRI SAT SUN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30你能帮助小 A 完成日历的制作吗?
【输入描述】
一行,一个正整数 ,表示需要按照格式输出 年 月的日历。
【输出描述】
输出包含若干行,表示 年 月的日历。
【样例输入1】
9【样例输出1】
MON TUE WED THU FRI SAT SUN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30【样例输入2】
6【样例输出2】
MON TUE WED THU FRI SAT SUN 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30【说明/提示】
对于所有测试点,保证 。
参考程序:
'''[GESP202509 三级] 日历制作https://www.luogu.com.cn/problem/B4414'''d = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]total = 0for i in range(1, 9): total += d[i]w = 1 + (7 - total % 7) # 计算1月1日是星期三m = int(input())print("MON TUE WED THU FRI SAT SUN")total = 0for i in range(1, m): total += d[i]w = (w + total % 7) % 7if w == 0: w = 7# 输出星期一之前的空白week = [" "] * (w - 1)for i in range(1, d[m] + 1):# week中已有7个成员,则输出if len(week) == 7: print(" ".join(week)) week = [f"{i:3d}"] # 保存当前日期else: week.append(f"{i:3d}") # 将当前日期存入week# 如果week还有成员,则输出if len(week) != 0: print(" ".join(week))【提交】
https://www.luogu.com.cn/problem/B4416
【问题描述】
对于 个整数构成的数组 ,如果对 都有 ,那么称数组 是一个连续段。
给定由 个整数构成的数组 ,你可以任意重排数组 中元素顺序。请问在重排顺序之后, 所有是连续段的子数组中,最长的子数组长度是多少?
例如,对于数组 ,可以将其重排为 ,有以下 个子数组:
其中除 以外的子数组均是连续段,因此是连续段的子数组中,最长子数组长度为 。
【输入描述】
第一行,一个正整数 ,表示数组长度。
第二行, 个整数 ,表示数组中的整数。
【输出描述】
一行,一个整数,表示数组 重排顺序后,所有是连续段的子数组的最长长度。
【样例输入1】
41 0 2 4【样例输出1】
3【样例输入2】
99 9 8 2 4 4 3 5 3【样例输出2】
4【数据范围】
对于 % 的测试点,保证 。
对于所有测试点,保证 ,。
参考程序:
'''[GESP202509 四级] 最长连续段https://www.luogu.com.cn/problem/B4416'''n = int(input())lst = sorted(list(set(map(int, input().split()))))i, max_v = 0, 0while i < len(lst): j = lst[i] k, cnt = 1, 1while i + k < len(lst) and lst[i + k] == j + k: cnt += 1 k += 1if cnt > max_v: max_v = cnt i += kprint(max_v)青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
