涉及考试:计算机学会编程能力等级认证(GESP)、电子学会等级考试 活动内容:提供不同等级的真题供小朋友们选择练习 备考建议:根据自己备考的等级选择相应题目 附加价值:可作为白名单比赛的备考训练 本月打卡:本月打卡题目
【问题描述】
利用 input() 语句先后输入两个正整数,分别代表鸡兔的头和脚的总数。其中,兔有四只脚,鸡有两只脚,都只有一个头。
请编写 Python 代码计算出兔和鸡的数量,输出结果形如“Chicken=15 Rabbit=5”,如没有解则输出“No solution!”。
【输入描述】
分两次输入,第一次输入头的总数,回车后输入脚的总数。
特别提示:常规程序中,输入时好习惯是有提示。考试时由于系统限定,输入时所有input()函数不可有提示信息。
【输出描述】
如果有解,则输出鸡和兔分别数量,形如“Chicken=15 Rabbit=5”Rabbit之前有 1 个英文半角空格,C 和 R 都为大写。
如没有解则输出“No solution!”,No 之后有 1 个英文半角空格,solution 之后有英文半角叹号。
特别提示:注意字母大小写以及空格、叹号等匹配一致。
【样例输入 1】
2050【样例输出 1】
Chicken=15 Rabbit=5【样例输入 2】
2030【样例输出 2】
No solution!参考程序:
注意:仅供参考,考生可以自行设计,结果符合题意即可。
方法一:
head = int(input())foot = int(input())i = 0num = 0while i <= head:if i * 2 + (head - i) * 4 == foot: print("Chicken={} Rabbit={}".format(i, head - i)) num += 1 i += 1if num == 0: print("No solution!")方法二:
head = int(input())foot = int(input())R = (foot - 2 * head) / 2C = head - Rif R < 0or int(R) != R: print('No solution!')else: C = int(C) R = int(R) print("Chicken={} Rabbit={}".format(C, R))统计一段文本中有几句话
编写程序,要求如下:
1、程序开始运行后,需要用户输入一段中文;
2、根据用户的输入,统计其中共有几句话(以句末为“。”“?”或“!”为依据,判断一句话);
3、输出统计结果,如:“这段话中共有3句话”。
参考程序:
注意:仅供参考,考生可以自行设计,结果符合题意即可。
方法一:
s = input("请输入一段中文:")total = s.count("。")total += s.count("?")total += s.count("!")print("这段话中共有%d句话" % total)方法二:
s = input("请输入一段中文:")total = 0for i in s:if i == "。"or i == "?"or i == "!": total += 1print("这段话中共有%d句话" % total)某班“天天向上”小组共有6个同学,姓名和身高数据分别存放在列表a中,编写程序实现小组同学按身高从高到低输出名单,运行结果如图所示:

程序代码如下,请在划线处补充完整:
a = [["李洪全", 135], ["王倩倩", 154], ["吴乐天", 148], ["周立新", 165], ["鲁正", 158], ["杨颖颖", 150]]for i in range(1, len(a)):for j in range(0,____①____):if a[j][1]____②____a[j+1][1]: a[j], a[j + 1] = a[j + 1], a[j]print("小组名单是:")for i in range(len(a)): print(____③____)参考答案:
本题考查冒泡排序算法。从外循环看,6个元素排5趟,应该能全部排整齐。内循环每趟主要从第一个元素开始,相邻元素两两相比,i=1时,j最终取到4,i=2时,j最终取到3,i=3时,j最终取到2,i=2时,j最终取到1,i=1时,j最终取到0,由于range()的终值是取不到的,故第一空应填len(a)-i;根据题目从高到低的要求,若前一个数小于后一个数,则应将其往后移,故第二空应为“<”;由输出结果观察可知,只需要输出排序后列表中的姓名部分,故第三空应填a[i][0]。
① len(a)-i;
② <;
③ a[i][0]。
【提交】
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天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
