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

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

  • 2026-09-06 10:48:00
【第38期】21天养成编程习惯:Python刷题第17天

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

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

Day17:GESP一级2024.09_小杨购物

【提交】

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

【问题描述】

小杨有  元钱用于购物。商品  的单价是  元,商品  的单价是  元。小杨想购买 相同数量 的商品  和商品 。

请你编写程序帮小杨计算出他最多能够购买多少个商品  和商品 。

【输入描述】

第一行包含一个正整数 ,代表小杨用于购物的钱的金额。

第二行包含一个正整数 ,代表商品  的单价。

第三行包含一个正整数 ,代表商品  的单价。

【输出描述】

输出一行,包含一个整数,代表小杨最多能够购买的商品  和商品  的数量。

【样例输入1】

1212

【样例输出1】

4

【提示】

对于样例1,由于需要购买相同数量的两种商品,因此小杨最多能够购买  件商品  和  件商品 ,共花费  元。因此,样例1的答案为 。

【样例输入2】

1312

【样例输出1】

4

【提示】

对于样例2,由于需要购买相同数量的两种商品,因此小杨最多能够购买  件商品  和  件商品 ,共花费  元。如果小杨想购买  件商品  和  件商品 ,则需花费  元,超过了小杨的预算  元。因此,样例2的答案为 。

对于全部数据,保证有 。

参考程序:

'''GESP一级2024.09_小杨购物https://www.luogu.com.cn/problem/B4034'''n = int(input())a = int(input())b = int(input())print(n // (a + b))

Day17:GESP二级2023.06_自幂数

【提交】

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

【问题描述】

1、判断一个正整数是否为自幂数;

2、自幂数是指  位数各位数字  次方之和是本身,如 153 是 3 位数,其每位数的 3 次方之和是 153 本身,因此 153 是自幂数,1634 是 4 位数,其每位数的 4 次方之和是 1634 本身;

3、首先输入一个整数  表示随后有  行每行有一个整数,输出每个整数是否为自幂数,如是则输出 T,否则 F。

【输入描述】

1、输入正整数 。不考虑输入不合规情形如负数、负整数、零或其他字符串等;

2、从第 2 行开始,输入  行每行一个正整数;

3、特别提示:常规程序中,输入时好习惯是有提示。考试时由于系统限定,输入时所有input()函数不可有提示信息。

【输出描述】

1、输出对应正整数是否为自幂数,如是则输出一个英文字母 T,否则一个英文字母F;

2、特别提示:注意输出字母为大写,小写将判为错误,前后没有空格等。

【样例输入1】

3152111153

【样例输出1】

FFT

【样例输入2】

5820854883488593477123455432

【样例输出2】

TTTFF

参考程序:

'''[GESP202306 二级] 自幂数判断https://www.luogu.com.cn/problem/B3841'''N = int(input())  # 输入数据的数量for i in range(N):    M = int(input())  # 输入判断的数    howDigit = 0# 获得输入整数的位数    tmp = Mwhile tmp != 0:        howDigit += 1        tmp //= 10# 执行完本步,M 将减少 1 位    tnt = 0    tmp = M# 计算各位幂次方的和while tmp != 0:        tnt = tnt + (tmp % 10) ** howDigit        tmp //= 10# 判断是否为自幂数if tnt == M:        print("T")else:        print("F")

Day17:GESP三级2025.12_密码强度

【提交】

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

【问题描述】

小杨是学校网络安全小组的成员,今天他的任务是设计一个“密码强度检测器”,帮助同学们检查自己的密码是否足够安全。一个安全的密码需要满足以下条件:

  • 密码至少包含8个字符(太短的密码容易被猜出来哦!)。
  • 密码至少包含一个大写字母(A、B、C、...、Z 都可以)。
  • 密码至少包含一个数字(0、1、2、3、...、9 都可以)。

例如:

  • 密码 PAs1s2an 是安全密码(有8位、包含大写字母 P、A 和数字 1、2)。
  • 密码 ab1da3cd 不是安全密码(没有大写字母)。
  • 密码 Paabdbcd 不是安全密码(没有数字)。
  • 密码 Pa2 不是安全密码(只有3位,太短了)。

【输入描述】

第一行一个正整数 ,代表数据组数。

对于每组数据,一行包含一个字符串,代表需要安全检测的密码。

【输出描述】

对于每组数据输出一行,如果满足强度要求输出 Y,否则输出 N。

【样例输入1】

6PAs1s2an1a2bCql3Pa12bsnaab1da3cdPaabdbcdPa2

【样例输出1】

YYYNNN

【样例解释】

  • 密码 PAs1s2an 是安全密码(有8位、包含大写字母 P、A 和数字 1、2)。
  • 密码 1a2bCql3 是安全密码(有8位、包含大写字母 C 和数字 1、2、3)。
  • 密码 Pa12bsna 是安全密码(有8位、包含大写字母 P 和数字 1、2)。
  • 密码 ab1da3cd 不是安全密码(没有大写字母)。
  • 密码 Paabdbcd 不是安全密码(没有数字)。
  • 密码 Pa2 不是安全密码(只有3位,太短了)。

【数据范围】

对于所有测试点,保证 ,并且每组数据密码长度不超过  且至少为 。

参考程序:

'''[GESP202512 三级] 密码强度https://www.luogu.com.cn/problem/B4449'''T = int(input())for _ in range(T):    s = input()if len(s) < 8:        print("N")continue    flag1, flag2 = False, Falsefor c in s:if"A" <= c <= "Z":            flag1 = Trueif"0" <= c <= "9":            flag2 = Trueif flag1 is Falseor flag2 is False:        print("N")else:        print("Y")

Day17:GESP四级2024.12_Recaman数列

【提交】

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

【问题描述】

小杨最近发现了有趣的 Recamán 数列,这个数列是这样生成的:

  • 数列的第一项  是 ;
  • 如果  是正整数并且没有在数列中出现过,那么数列的第  项  为 ,否则为 。

小杨想知道 Recamán 数列的前  项从小到大排序后的结果。手动计算非常困难,小杨希望你能帮他解决这个问题。

【输入描述】

第一行,一个正整数 。

【输出描述】

一行, 个空格分隔的整数,表示 Recamán 数列的前  项从小到大排序后的结果。

【样例输入】

5

【样例输出】

1 2 3 6 7

【样例解释】

对于样例 1,:

  • ;
  • ,不是正整数,因此 ;
  • ,不是正整数,因此 ;
  • ,是正整数,且没有在数列中出现过,因此 ;
  • ,不是正整数,因此 ;

 从小到大排序后的结果为 1 2 3 6 7。

【样例输入2】

8

【样例输出2】

1 2 3 6 7 12 13 20

【数据范围】

对于所有数据点,保证 。

参考程序:

方法一:

'''GESP202412 四级 Recamánhttps://www.luogu.com.cn/problem/B4068'''n = int(input())a = [0] * na[0] = 1for i in range(1, n):    b = a[i - 1] - (i + 1)if b > 0and b notin a:        a[i] = belse:        a[i] = a[i - 1] + (i + 1)a.sort()print(" ".join([str(i) for i in a]))

方法二:

'''GESP202412 四级 Recamánhttps://www.luogu.com.cn/problem/B4068'''n = int(input())a = [1]for i in range(2, n + 1):    a.append(a[-1] - i if a[-1] - i > 0and a[-1] - i notin a else a[-1] + i)defbubble_sort(a):    n, flag = len(a), Truewhile flag:        flag = Falsefor i in range(n - 1):if a[i] > a[i + 1]:                flag = True                a[i], a[i + 1] = a[i + 1], a[i]bubble_sort(a)for i in range(n):    a[i] = str(a[i])print(' '.join(a))

青少年编程竞赛交流

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。

最新文章

随机文章