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

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

  • 2026-10-11 07:18:17
【第40期】21天养成编程习惯:Python刷题第09天

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

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

Day09:GESP一级2025.06_值日

【提交】

https://www.luogu.com.cn/problem/B4355

【问题描述】

小杨和小红是值日生,负责打扫教室。小杨每  天值日一次,小红每  天值日一次。今天他们两个一起值日,请问至少多少天后,他们会再次同一天值日?

【输入描述】

第一行,一个正整数 ,表示小杨的值日周期;

第二行,一个正整数 ,表示小红的值日周期。

【输出描述】

一行,一个整数,表示至少多少天后他们会再次同一天值日。

【样例输入1】

46

【样例输出1】

12

【样例输入2】

57

【样例输出2】

35

【提示】

对于所有测试点,保证 。

参考程序:

''' [GESP202506 一级] 值日https://www.luogu.com.cn/problem/B4355'''m = int(input())n = int(input())k = nwhile k % m != 0:    k += nprint(k)

Day09:GESP二级2023.09_数字黑洞

【提交】

https://www.luogu.com.cn/problem/B3866

【问题描述】

给定一个三位数,要求各位不能相同。例如,352 是符合要求的,112 是不符合要求的。将这个三位数的三个数字重新排列,得到的最大的数,减去得到的最小的数,形成一个新的三位数。对这个新的三位数可以重复上述过程。神奇的是,最终一定会得到 495!

试试看,重新排列352,得到的最大数为532,最小数为235,它们的差是297;变换972-279=693,得到693;变换693,963-369=594;变换594,954-459=495。因此,352经过4次变换得到了495。

现在,输入的三位数,你能通过编程得出,这个三位数经过多少次变换能够得到495吗?

【输入描述】

输入一行,包含一个符合要求的三位数。

【输出描述】

输出一行,包含一个整数,表示经过次变换得到495。

【样例输入1】

352

【样例输出1】

4

参考程序:

'''[GESP202309 二级] 数字黑洞https://www.luogu.com.cn/problem/B3866'''N = int(input())count = 0while N != 495:    a = N // 100    b = N // 10 % 10    c = N % 10    a_ = max(max(a, b), c)    c_ = min(min(a, b), c)    b_ = a + b + c - a_ - c_    max_ = a_ * 100 + b_ * 10 + c_    min_ = c_ * 100 + b_ * 10 + a_    N = max_ - min_    count += 1print(count)

Day09:GESP三级2025.06_奇偶校验

【提交】

https://www.luogu.com.cn/problem/B4358

【问题描述】

数据在传输过程中可能出错,因此接收方收到数据后通常会校验传输的数据是否正确,奇偶校验是经典的校验方式之一。

给定  个非负整数  代表所传输的数据,它们的校验码取决于这些整数在二进制下  的数量之和的奇偶性。如果这些整数在二进制下共有奇数个 ,那么校验码为 ;否则校验码为 。你能求出这些整数的校验码吗?

【输入描述】

第一行,一个正整数 ,表示所传输的数据量。

第二行, 个非负整数 ,表示所传输的数据。

【输出描述】

输出一行,两个整数,以一个空格分隔:

第一个整数表示  在二进制下  的总数量;

第二个整数表示校验码(0或1)。

【样例输入1】

471 69 83 80

【样例输出1】

13 1

【样例输入2】

61 2 4 8 16 32

【样例输出2】

6 0

【数据范围】

对于所有测试点,保证 ,。

参考程序:

方法一:

''' [GESP202506 三级] 奇偶校验 https://www.luogu.com.cn/problem/B4358'''n = int(input())lst = list(map(int, input().split()))cnt = 0for x in lst:while x != 0:if x % 2 == 1:            cnt += 1        x = x // 2print("{0} {1}".format(cnt, cnt % 2))

方法二:

''' [GESP202506 三级] 奇偶校验 https://www.luogu.com.cn/problem/B4358'''n = int(input())lst = list(map(int, input().split()))cnt = 0for x in lst:    bin_str = bin(x)[2:]    cnt += bin_str.count("1")print("{0} {1}".format(cnt, cnt % 2))

Day09:GESP四级2024.12_Recaman数列

【提交】

https://www.luogu.com.cn/problem/B4068

【问题描述】

小杨最近发现了有趣的 Recamán 数列,这个数列是这样生成的:

  • 数列的第一项  是 ;
  • 如果  是正整数并且没有在数列中出现过,那么数列的第  项  为 ,否则为 。

小杨想知道 Recamán 数列的前  项从小到大排序后的结果。手动计算非常困难,小杨希望你能帮他解决这个问题。

【输入描述】

第一行,一个正整数 。

【输出描述】

一行, 个空格分隔的整数,表示 Recamán 数列的前  项从小到大排序后的结果。

【样例输入】

5

【样例输出】

1 2 3 6 7

【样例解释】

对于样例 1,:

  • ;
  • ,不是正整数,因此 ;
  • ,不是正整数,因此 ;
  • ,是正整数,且没有在数列中出现过,因此 ;
  • ,不是正整数,因此 ;

 从小到大排序后的结果为 1 2 3 6 7。

【样例输入2】

8

【样例输出2】

1 2 3 6 7 12 13 20

【数据范围】

对于所有数据点,保证 。

参考程序:

方法一:

'''GESP202412 四级 Recamánhttps://www.luogu.com.cn/problem/B4068'''n = int(input())a = [0] * na[0] = 1for i in range(1, n):    b = a[i - 1] - (i + 1)if b > 0and b notin a:        a[i] = belse:        a[i] = a[i - 1] + (i + 1)a.sort()print(" ".join([str(i) for i in a]))

方法二:

'''GESP202412 四级 Recamánhttps://www.luogu.com.cn/problem/B4068'''n = int(input())a = [1]for i in range(2, n + 1):    a.append(a[-1] - i if a[-1] - i > 0and a[-1] - i notin a else a[-1] + i)defbubble_sort(a):    n, flag = len(a), Truewhile flag:        flag = Falsefor i in range(n - 1):if a[i] > a[i + 1]:                flag = True                a[i], a[i + 1] = a[i + 1], a[i]bubble_sort(a)for i in range(n):    a[i] = str(a[i])print(' '.join(a))

青少年编程竞赛交流

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。

最新文章

随机文章