当前位置:首页>python>【第38期】21天养成编程习惯:Python刷题第16天

【第38期】21天养成编程习惯:Python刷题第16天

  • 2026-09-08 07:11:12
【第38期】21天养成编程习惯:Python刷题第16天

跟老马一起“升级打怪”学编程!

  • 涉及考试:计算机学会编程能力等级认证(GESP)、电子学会等级考试
  • 活动内容:提供不同等级的真题供小朋友们选择练习
  • 备考建议:根据自己备考的等级选择相应题目
  • 附加价值:可作为白名单比赛的备考训练
  • 本月打卡:本月GESP_Python打卡题目

Day16:GESP一级2023.03_分数交错加减计算

【问题描述】

分数交错加减计算,形如:

(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))

Day16:GESP二级2025.06_幂和数

【提交】

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)

Day16:GESP三级2025.09_日历制作

【提交】

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

Day16:GESP四级2025.09_最长连续段

【提交】

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天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。

最新文章

随机文章