202 2 年全 国青少年信息素养大赛 (P yth on ) 复
赛真题
第1 题
小明邀请了 四个同学一起游玩,带了一盒草莓平均分给大家一起吃,任 意输
入 草莓的数 量 n ,输出每个人可以分到几颗草莓,最后剩下了几颗。
注 意:
in p ut( ) 内不 添加任何参数
只有完全正 确才可提交,若无法点击提交说明答题存在错误,可及时进 行检
查 并修改
输入样例:
28
输 出样例 : :
5
3
第2 题
商店铅笔优 惠销售标准:购买 8 支以内(含),每支售价 0.8 元,超过 8 支部
分,每支售 价 0.7 元。任意输入购买的铅笔总量 n ,输出总金额。
注 意:
# 将字符数字 转成整数
n = int (inp ut ( ))
# 方法 1 ,使 用 // 和 % 运算符
pri nt (n / / 5)
pri nt (n % 5)
# 方法 2 ,使 用 divm od 内置函数
a, b = div mod (n,5)
p ri nt (a)
p ri nt (b)
1
2
3
4
5
6
7
8
9
in p ut( ) 内不 添加任何参数
只有完全正 确才可提交,若无法点击提交说明答题存在错误,可及时进 行检
查 并修改
输入样例:
11
输 出样例:
8.5
法 二:
第 3 题
输入一个正 整数 n ,如果是四位数,则分别输出这个数千位、百位,十 位和个
位 分别为多 少,如果是两位数,则输出个位数字是多少,如果不是两位 或者四位
数 ,则输出 no 。
注意:
in p ut( ) 内不 添加任何参数
只有完全正 确才可提交,若无法点击提交,说明答题存在错误,可及时 进行
检 查并修改
输入样例 1 :
# 将字符数字 转成整数
n = int (inp ut ( ))
# 分两种情况 进行计算
if n <= 8:
pri nt (n * 0 .8 )
els e :
pri nt ( 8 * 0.8 + ( n - 8) * 0.7 )
1
2
3
4
5
6
7
# 将字符数字 转成整数
n = int (inp ut ( ))
# 一行代码的 写法
pri nt (n * 0 .8 if n <= 8 els e 8 * 0.8 + ( n - 8) * 0.7 )
1
2
3
4
234 5
输 出样例:
2
3
4
5
输入样例 2 :
23
输 出样例:
3
输入样例 3 :
666
输 出样例:
no
[参 考代码 ] :
第4 题
任意输入一 个整数 n ,输出一个 n 行的的图案,每行都是由数字 + 空格 + 号组
成, 号后无空格 。
n = inp ut ( )
if len (n) == 2:
pri nt (n[-1] )
eli f len (n) == 4:
pri nt (n[0] , n[1], n[2], n[3], sep ="\n " )
els e :
pri nt (" no " )
1
2
3
4
5
6
7
注意:
in p ut( ) 内不 添加任何参数
只有完全正 确才可提交,若无法点击提交说明答题存在错误,可及时进 行检
查 并修改
输入样例:
5
输出样例:
0 ** ***
1 ** *
2 *
3 * **
4 *
第 5 题
已知:缺憾 数是指这个数加 1 之后一定可以表示成另一个数的平方的形 式,比
如 8 和 99 就是两 个缺憾数:
8 + 1 = 3 ^ 2
9 9 + 1 = 1 0 ^ 2
任 意输入两 个正整数 m 和 n ,按顺序输出 m 和 n 这两个数字范围内所有的 缺憾
数 。
注意:
in p ut( ) 内不 添加任何参数
n = int (inp ut ( ))
for i in ran ge (n) :
pri nt (i," " * i, "*" * ( 2 * ( n - i) - 1), sep ="" )
1
2
3
输入样例:
48
10
输 出样例:
15
24
35
如 果不熟悉 ** 运算的话,可以使用循环逐个来判断,相对来说,代码会麻烦
一 些。
第 6 题
同学们正在 练习列队,从第一个人开始按编号 1 、 2 、 … 、 n(n < 1000) 报数,开
始 所有人都 是面向前方,第一遍报数是 2 的倍数的同学执行一遍向后转 命令,第
二 遍报数是 3 的倍数的同学执行一遍向后转命令,第三遍报数是 5 的倍数 的同学执
行 一遍向后 转命令,输入人数 n ,按顺序输出最终仍然面向前方的同学 的编号。
注 意:
in p ut( ) 内不 添加任何参数
m = int (inp ut ( ))
n = int (inp ut ( ))
for i in ran ge (m in (m,n), max (m,n)):
# 计算开方数 ,并转成 整数
a = ( i + 1) ** 0.5
# 将 a 转成整 数
a = int (a)
if i + 1 == a ** 2:
# 输出数字
pri nt (i)
1
2
3
4
5
6
7
8
9
1 0
11
-E N D-
只 有完全正 确才可提交,若无法点击提交说明答题存在错误,可及时进 行检
查 并修改
输入样例:
10
输 出样例:
1
6
7
10
# 获取输入, 并转成整 数
n = int (inp ut ( ))
# 初始化列表 ,默认都 是 -1 ,表示向前
dir ectio n = [ -1] * n
# 第 1 遍报数 ,注意报 数是从 1 开始的
for i in ran ge (n) :
if ( i + 1) % 2 == 0:
dir ectio n [i] = 1
# 第 2 遍报数
for i in ran ge (n) :
if ( i + 1) % 3 == 0:
dir ectio n [i] *= -1
# 第 3 遍报数
for i in ran ge (n) :
if ( i + 1) % 5 == 0:
dir ectio n [i] *= -1
# 输出值为 -1 是列表项
for i in ran ge (n) :
if dir ectio n [i] == -1:
pri nt (i + 1)
1
2
3
4
5
6
7
8
9
1 0
11
12
13
14
15
16
17
1
2022年全国青少年信息素养大赛(Python)复赛真题