涉及考试:计算机学会编程能力等级认证(GESP)、电子学会等级考试 活动内容:提供不同等级的真题供小朋友们选择练习 备考建议:根据自己备考的等级选择相应题目 附加价值:可作为白名单比赛的备考训练 本月打卡:本月GESP_Python打卡题目
【提交】
https://www.luogu.com.cn/problem/B3864
【问题描述】
所有个位数为的正整数,以及所有的倍数,都被小明称为“幸运数”。小明想知道正整数和之间(包括和)所有幸运数的和,你能帮帮他吗?
【输入描述】
输入3行。第一行包含一个正整数,第二行包含一个正整数,第三行包含一个正整数。约定,。
【输出描述】
输出1行,符合题意的幸运数之和。
【样例输入1】
7110【样例输出1】
7【样例解释1】
1和10之间共有1个7幸运数:7。因为7既是7的倍数,个位数⼜为7。因此,结果为7。
【样例输入2】
71020【样例输出2】
31【样例解释2】
10和20之间共有2个7幸运数:14和17。14是7的倍数,17的个位数为7。因此,结果为31。
参考程序:
方法一:
'''[GESP202309 一级] 小明的幸运数https://www.luogu.com.cn/problem/B3864'''k = int(input())L = int(input())R = int(input())s = 0for i in range(L, R + 1):if i % 10 == k or i % k == 0: s += iprint(s)方法二:
'''[GESP202309 一级] 小明的幸运数https://www.luogu.com.cn/problem/B3864'''k = int(input())L = int(input())R = int(input())lst = [i for i in range(L, R + 1) if i % 10 == k or i % k == 0]print(sum(lst))【提交】
https://www.luogu.com.cn/problem/B3840
【问题描述】
小明刚刚学习了素数的概念:如果一个大于 1 的正整数,除了 1 和它自身外,不能被其他正整数整除,则这个正整数是素数。现在,小明想找到两个正整数 A 和 B 之间(包括 A 和 B)有多少个素数。
【输入描述】
输入 2 行,第一行包含正整数 A,第二行包含正整数 B。约定 2≤A≤B≤1000。
【输出描述】
输出一行,包含一个整数 C,表示找到 C 个素数。
【样例输入1】
210【样例输出1】
4【样例解释1】
在 2 和 10 之间有 4 个素数,分别为:2、3、5、7。【样例输入2】
98100【样例输出2】
0参考程序:
'''[GESP202306 二级] 找素数https://www.luogu.com.cn/problem/B3840'''n = int(input())m = int(input())tnt = 0for i in range(n, m + 1):for j in range(2, i):if i % j == 0:breakelse: tnt += 1print(tnt)【提交】
https://www.luogu.com.cn/problem/B4359
【问题描述】
有 位小朋友排成一队等待老师分糖果。第 位小朋友想要至少 颗糖果,并且分给他的糖果数量必须比分给前一位小朋友的糖果数量更多,不然他就会不开心。
老师想知道至少需要准备多少颗糖果才能让所有小朋友都开心。你能帮帮老师吗?
【输入描述】
第一行,一个正整数 ,表示小朋友的人数。
第二行, 个正整数 ,依次表示每位小朋友至少需要的糖果数量。
【输出描述】
输出一行,一个整数,表示最少需要准备的糖果数量。
【样例输入1】
41 4 3 3【样例输出1】
16【样例输入2】
15314 15926 53589793 238462643 383279502 8 8 4 1 9 7 1 6 9 3【样例输出2】
4508143253【数据范围】
对于所有测试点,保证 ,。
参考答案:
'''[GESP202506 三级] 分糖果https://www.luogu.com.cn/problem/B4359'''n = int(input())lst = list(map(int, input().split()))for i in range(1, len(lst)):if lst[i] <= lst[i - 1]: lst[i] = lst[i - 1] + 1print(sum(lst))【提交】
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天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
