NOC2023 复赛 小高 组
1. 第⼆个字符
题⽬描述
给定⼀个字符串 ,请输出这个字符串中的第⼆个字符。
输⼊描述
共⼀⾏
⼀个字符串 ,⾄少有 2个字符
输出描述
共⼀⾏
这个字符串的第⼆个字符
样例输⼊
编程真有趣!
样例输出
程
解题思路:
1. 使⽤ input() 命令输⼊⼀个字符串
2. 通过索引访问第⼆个字符 ,注意字符串索引从 0开始
1 s = input () # 输⼊
2 print (s[ 1]) # 第⼆个字符索引 是 1
2. 时间换算
题⽬描述
玥玥每天⽤在学习上的总时间为 n秒 ,请将它转换成以⼩时、分 钟和秒组成的时间格式 ,中间以冒号分
隔。
⽐如 , n=3600 ,那么会输出 1:0:0 ,因为 3600 秒刚好为⼀⼩时。
再⽐如 , n=100 ,那么会输出 0:1:40 ,因为 100 秒不到 1⼩时 ,为 1分钟 40 秒。
输⼊描述
共⼀⾏
⼀个正整数 n
输出描述
共⼀⾏
表⽰时间
样例输⼊ 1
3600
样例输出 1
1:0:0
样例输⼊ 2
100
样例输出 2
0:1:40
解题思路:
3600 秒 =1⼩时 ,所以⼩时数等 于总秒数整除以 3600
60 秒 =1分钟 ,所以分钟数等于总秒数减去⼩时部分 ,再整除以 60
不够 1分钟的部分作为秒位上的数字 ,即总秒数对 60 取余
最后 ,将计算结果⽤ :拼接输出
1 n = int (input ()) # 输⼊
2 h = n // 3600 # 计算⼩时位数字
3 m = (n - h * 3600 ) // 60 # 计算分钟位数字
4 s = n % 60 # 计算秒位数字
5 print (str (h) + ':' + str (m) + ':' + str (s)) # 输出
3. 摘苹果
题⽬描述
三个同学⼀起去果园摘苹果。⼩亮摘的苹果个数为 a,⼩佳摘的苹果个数为 b,⼩美 摘的苹果个数为 c。
王⽼师准备帮助他们补摘⼀些苹果 ,使得三⼈摘的苹果个数相同。请问王⽼师最少应该摘 多少个苹
果?
输⼊描述
共⼀⾏
三个整数 ,分别为 a、 b、 c,两数之间⽤逗号隔开
输出描述
共⼀⾏
⼀个整数 ,表⽰最少要摘苹果数
样例输⼊
2,6,3
样例输出
7
解题思路:
想要使三⼈摘的苹果数相同 ,并且⽼师摘的苹果最少 ,策略是:找到拥有最多苹果的⼈ ,然后将 其他⼈的苹果
数量增加到与其相同。
1 li = [int (i) for i in input ().split( ',' )] # 推导式将输⼊转 为整数列表
2 m = max (li) # max() 命令求最多的苹果数
3 num = m * 3 - sum (li) # 补⻬
4 print (num) # 输出结果
4. 空⼼数字矩形
题⽬描述
给定⼀个正整数 n(2 < n< 10) ,打印由数字 n和空格组成的空⼼矩形。
输⼊描述
共⼀⾏
⼀个正整数 n(2 < n<10)
输出描述
共 n⾏
⼀个由数字 n和空格组成的空⼼矩形 ,要求⾏和列都是 n个数字
样例输⼊
3
样例输出
333
3 3
333
解题思路:
分⾏讨论:
先打印第⼀⾏ ,以⼀个数字⼀个空格为⼀组 ,共重复 n次
接下来打印第 2到 n-1⾏ ,所以重复执⾏ n-2次 ,每⼀⾏包含:⼀个数字 ,( 2*n-3)个空格 ,⼀个数字
最后⼀⾏和第⼀⾏⼀样 ,以⼀个数字⼀个空 格为⼀组 ,共重复 n次
1 n = int (input ()) # 输⼊ n
2 # 打印第⼀⾏
3 print (( str (n) + ' ') * n)
4 # 打印中间 n - 2 ⾏
5 for i in range (n - 2):
6 print (str (n) + ' ' * (2 * n - 3) + str (n))
7 # 打印最后⼀⾏
8 print (( str (n) + ' ') * n)
5. 猫咪⽯碑
题⽬描述
考古专家在埃及发现⼀块神秘的⽯碑 ,碑⽂上刻着⼀些语⾔符号 ,可看作⼀个只包含 C、 A、 T 这三种
字符的字符串 ,为了破译碑⽂的含义 ,请你统计单词 CAT 在⽂本中出现了多少次。
CAT 中可以穿插字⺟ ,也就是说 ,只要三个字⺟按正确顺序出现即可 ,不同的 CAT 也可以共享字⺟。
例如 , CAT 在 CTAT 中出现 1次 ,在 CCAT 中出现 2次 ,在 CCAATT 中出现 8次。
输⼊描述
共⼀⾏
⼀个字符串 ,只包含 C、 A、 T三种字符
输出描述
共⼀⾏
⼀个数字 ,表⽰ CAT 出现的次数
样例输⼊
CAATTT
样例输出
6
解题思路:
这道题思路很巧妙 ,我们可以先来考虑两个字符的情况:统计字符串中能组成多少个 CA
在共享字⺟的前提下 ,对于某个 A来说 , 'CA' 中 CA 出现了 1次 , ‘ 'CCA' 中 CA 出现了 2次 , 'AC' 中 CA 出现了
0次 ,我们可以发现 , A之后的 C是⽆效的 , A之前有⼏个 C, CA 就出现了⼏次;
所以 ,我们可以遍历字符串 ,每出现⼀个 C 就累计 C出现的次数 ,每出现⼀个 A就累计 CA 出现的次数(即累
加此时 C 已经出现的次数)
同理 ,想要统计 CAT 出现的次数也是⼀样的 ,下⾯ 来看代码
1 s = input () # 输⼊字符串
2 c = ca = cat = 0 # c 统计 C 出现的次数, a 统计 CA 出现的次数, cat 统计 CAT 出现的次数
3 for i in s:
4 if i == 'C' : # 出现 C
5 c += 1 # 累加 1
6 elif i == 'A' : # 出现 A
7 ca += c # 累加 A 之前 C 出现的次数
8 else : # 出现 T
9 cat += a # 累加 T 之前 CA 出现的次数
10 print (cat) # 输出结果
6. 三阶幻⽅
题⽬描述
三阶幻⽅是最简单的幻⽅ ,⼜叫九宫格 ,是由九个数字组成的⼀个三⾏三列的矩阵 ,其对角线、横
向、纵向的和都⼀样。现在有 9个连续的⾃然数 ,
NOC2023小高组python复赛真题-含答案,2023年NOC编程马拉松Python小高组复赛真题含答案