当前位置:首页>java>【第35期】21天养成编程习惯:Python刷题第20天

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

  • 2026-10-21 13:27:52
【第35期】21天养成编程习惯:Python刷题第20天

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

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

Day20:GESP一级2023.03_鸡兔同笼

【问题描述】

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

Day20:CIE二级2022.09_编程题37

统计一段文本中有几句话

编写程序,要求如下:

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)

Day20:CIE三级2023.05_编程题38

某班“天天向上”小组共有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]。


Day20:GESP四级2023.09_变长编码

【提交】

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

最新文章

随机文章