涉及考试:计算机学会编程能力等级认证(GESP)、电子学会等级考试 活动内容:提供不同等级的真题供小朋友们选择练习 备考建议:根据自己备考的等级选择相应题目 附加价值:可作为白名单比赛的备考训练 本月打卡:本月GESP_Python打卡题目
【提交】
https://www.luogu.com.cn/problem/B3922
【问题描述】
小杨需要从 到 报数。在报数过程中,小杨希望跳过 的倍数。例如,如果 ,,那么小杨就需要依次报出 、、。
现在,请你依次输出小杨报的数。
【输入描述】
输入 2 行,第一行一个整数 ();第二行一个整数 ()。
【输出描述】
输出若干行,依次表示小杨报的数。
【特别提醒】
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
【样例输入 1】
52【样例输出 1】
135【样例输入 2】
103【样例输出 2】
12457810参考程序:
'''[GESP202312 一级] 小杨报数https://www.luogu.com.cn/problem/B3922'''N = int(input())M = int(input())for i in range(1, N + 1):if i % M != 0: print(i)【提交】
https://www.luogu.com.cn/problem/B3955
【问题描述】
小杨想要构造一个 的日字矩阵( 为奇数),具体来说,这个矩阵共有 行,每行 个字符,其中最左列、最右列都是 |,而第一行、最后一行、以及中间一行(即第 行)的第 个字符都是 -,其余所有字符都是半角小写字母 x。例如,一个 的日字矩阵如下:
|---||xxx||---||xxx||---|请你帮小杨根据给定的 打印出对应的“日字矩阵”。
【输入描述】
一行一个整数 (,保证 为奇数)。
【输出描述】
输出对应的“日字矩阵”。
请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出 行,每行除了换行符外恰好包含 个字符,这些字符要么是 -,要么是 |,要么是 x。你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。
【特别提醒】
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
【样例输入1】
5【样例输出1】
|---||xxx||---||xxx||---|【样例输入2】
7【样例输出2】
|-----||xxxxx||xxxxx||-----||xxxxx||xxxxx||-----|参考程序:
'''[GESP202403 二级] 小杨的日字矩阵https://www.luogu.com.cn/problem/B3955'''n = int(input())for i in range(n): buf = ""for j in range(n):if j == 0or j == n - 1: ch = "|"elif i == 0or i == n - 1or i == n // 2: ch = "-"else: ch = "x" buf = buf + ch print(buf)【提交】
https://www.luogu.com.cn/problem/B4003
【问题描述】
小杨学习了加密技术移位,所有大写字母都向后按照一个固定数目进行偏移。偏移过程会将字母表视作首尾相接的环,例如,当偏移量是3的时候,大写字母 A 会替换成 D,大写字母 Z 会替换成 C,总体来看,大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 会被替换成 DEFGHIJKLMNOPQRSTUVWXYZABC。
注:当偏移量是26的倍数时,每个大写字母经过偏移后会恰好回到原来的位置,即大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 经过偏移后会保持不变。
【输入描述】
第一行包含一个正整数 。
【输出描述】
输出在偏移量为 的情况下,大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 移位替换后的结果。
【样例输入1】
3【样例输出1】
DEFGHIJKLMNOPQRSTUVWXYZABC【样例解释】
当偏移量是3的时候,大写字母 A 会替换成 D,大写字母 Z 会替换成 C,总体来看,大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 会被替换成 DEFGHIJKLMNOPQRSTUVWXYZABC。
【数据范围】
对于全部数据,保证有 。
参考程序:
'''GESP202406 三级 移位https://www.luogu.com.cn/problem/B4003'''s = "".join([chr(ord("A") + i) for i in range(26)])n = int(input()) % 26print(s[n:] + s[:n])【提交】
https://www.luogu.com.cn/problem/B3870
【问题描述】
小明刚刚学习了三种整数编码方式:原码、反码、补码,并了解到计算机存储整数通常使用补码。但他总是觉得,生活中很少用到这么大的数,生活中常用的 这种数也同样需要用4个字节的补码表示,太浪费了些。
热爱学习的小明通过搜索,发现了一种正整数的变长编码方式。这种编码方式的规则如下:
1、对于给定的正整数,首先将其表达为二进制形式。例如,, 。
2、将二进制数从低位到高位切分成每组7bit,不足7bit的在高位用0填补。例如,变为的一组,变为和的两组。
3、由代表低位的组开始,为其加入最高位。如果这组是最后一组,则在最高位填上0,否则在最高位填上1。于是,0的变长编码为一个字节,926的变长编码为和两个字节。
这种编码方式可以用更少的字节表达比较小的数,也可以用很多的字节表达非常大的数。例如,的二进制为,于是它的变长编码为(十六进制表示) ,共9个字节。
你能通过编写程序,找到一个正整数的变长编码吗?
【输入描述】
输入第一行,包含一个正整数。约定 。
【输出描述】
输出一行,输出对应的变长编码的每个字节,每个字节均以2位十六进制表示(其中,A-F使用大写字母表示),两个字节间以空格分隔。
【样例输入1】
0【样例输出1】
00【样例输入2】
926【样例输出2】
9E 07【样例输入3】
987654321012345678【样例输出3】
CE 96 C8 A6 F4 CB B6 DA 0D参考程序:
'''GESP202309 四级 变长编码https://www.luogu.com.cn/problem/B3870'''N = int(input())# 第一步:转成二进制N = bin(N)[2:] # 去掉转换成二进制后前面的0bif len(N) % 7 != 0: N = "0" * (7 - len(N) % 7) + N# 第二步:切7位bList = []for i in range(0, len(N), 7): bList.append(N[i:i + 7])bList = bList[::-1] # 逆序# 第三步:补最高位,最后一组补0,其他补1for i, b7 in enumerate(bList[:-1]): bList[i] = "1" + b7 # 最高位补1else: bList[-1] = "0" + bList[-1] # 最后一个补0# 第四步:转成16进制(两位,不足前面填充0)rst = ""for b8 in bList: rst += hex(int(b8, 2))[2:].upper().zfill(2) + " "# 第五步:去掉最后空格输出结果rst = rst[:-1]print(rst)青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
