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

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

  • 2026-09-08 19:18:51
【第42期】21天养成编程习惯:Python刷题第01天

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


Day01:GESP一级2024.06_休息时间

【提交】

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

【问题描述】

小杨计划在某个时刻开始学习,并决定在学习  秒后开始休息。

小杨想知道自己开始休息的时刻是多少。

【输入描述】

前三行每行包含一个整数,分别表示小杨开始学习时刻的时 、分 、秒 (,, 的值符合 )。

第四行包含一个整数 ,表示小杨学习的总秒数(注: 的值符合 )。

【输出描述】

输出一行,包含三个整数,分别表示小杨开始休息时刻的时、分、秒。

【样例输入1】

12595910

【样例输出1】

13 0 9

【样例解释】

小杨在时刻 12:59:59 开始学习,学习  秒后开始休息,即在 13:0:9 时刻开始休息。

【数据范围】

对于全部数据,保证有 。

参考程序:

'''GESP2024.06休息时间'''h = int(input())m = int(input())s = int(input())k = int(input())m += (s + k) // 60s = (s + k) % 60h += m // 60m %= 60print(f"{h}{m}{s}")

Day01: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)

Day01:GESP三级2024.12_打印数字

【提交】

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

【问题描述】

小杨为数字 ,, 和  设计了一款表示形式,每个数字占用了  的网格。数字 ,, 和  的表示形式如下:

..... ****. ..... ......***. ****. ****. ****..***. ****. ..... ......***. ****. .**** ****...... ****. ..... .....

小杨想请你将给定的数字  转换为对应的表示形式。

【输入描述】

第一行包含一个正整数代表 。

【输出描述】

输出对应的表示形式。

【样例输入1】

12230

【样例输出1】

****.....................****.****.****.****..***.****.................***.****..****.********..***.****.....................

【数据范围】

对于全部数据,保证有 ,且  仅由数字 ,,, 组成。

参考程序:

'''GESP202412 三级 打印数字https://www.luogu.com.cn/problem/B4067'''lst = [    [".....", ".***.", ".***.", ".***.", "....."],    ["****.", "****.", "****.", "****.", "****."],    [".....", "****.", ".....", ".****", "....."],    [".....", "****.", ".....", "****.", "....."]]n = list(map(int, list(input().strip())))for i in range(5):    s = ""for j in n:        s += lst[j][i]    print(s)

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

最新文章

随机文章