image

编辑人: 长安花落尽

calendar2025-07-16

message6

visits455

2022年NOC大赛_Python编程马拉松赛项_决赛_小学高年级组真题参考答案

一、单选题

1、Python中关于自定义函数,下列说法正确的是?

A 函值一定有返回值

B 函数一定有参数

C 函数内一定要定义变量

D 以上三种说法都不对


2、下列说法错误的是?

A、

二维列表里的元素一定是一维列表

B、

元组里的元素是不可以被修改的

C、

向字典里添加键值对或修改键值对的值,都可以使用赋值符号

D、

字符串和列表是可以相互转换的


二、实操题

3、时间判断 

描述: 

二十四时计时法按照00:00:00到23:59:59计时。其中, 

00:00:00~05:59:59点表示凌晨, 

06:00:00~11:59:59点表示上午, 

12:00:00~12:59:59点表示中午, 

13:00:00~18:59:59点表示下午, 

19:00:00~23:59:59点表示晚上。 

现在给出一个时间,请你判断此时是凌晨、上午、中午、下午还是晚上。 

输入: 

第一行,一个整数T,表示输入的时间个数; 

接下来T行,每行一个字符串,表示时间点。格式为:时:分:秒 

输出: 

共T行, 

每行一个字符串,表示该时间点对应的是凌晨、上午、中午、下午还是晚上。

参考答案:br />对于每个时间点,按照题目描述的规则进行判断,输出对应的时间段。


4、体育课队列 

描述: 

操场上站了两列小朋友,每一列的小朋友都是按照从低到高的顺序排列的,现在体育老师要求两列小朋友合并成一列,并仍然按照从低到高的顺序排列。 

输入: 

共两行, 

第一行,多个整数,整数之间用空格隔开,表示第一列小朋友的身高。 

第二行,多个整数,整数之间用空格隔开,表示第二列小朋友的身高。 

输出: 

共一行,所有小朋友的身高,按照从低到高的顺序输出

参考答案:br />这道题目可以通过Python编程语言来解决。具体思路如下:1. 创建一个空列表,用于存储所有小朋友的身高。2. 遍历第一行输入的整数,按照从低到高的顺序,将每个整数添加到空列表中。3. 遍历第二行输入的整数,同样按照从低到高的顺序,将每个整数添加到空列表中。4. 对空列表进行排序,确保所有小朋友的身高按照从低到高的顺序排列。5. 将排序后的列表转换为字符串,以空格分隔每个整数,并输出到控制台。


5、村庄与部落 

描述:

有n个村庄坐落成一条直线,A和B两个部落生活在这里。每个村庄要么无人居住,要么被两个部落之一所占据。 

如果连续n个无人居住的村庄两侧都是被部落A占据的村庄,那么这n个村庄也视作被部落A占据;对于部落B也是如此。 

请求出被部落A和B分别占据的村庄个数。 

输入:

第一行,一个整数T,代表测试数据的组数 

接下来是T组数据:每组数据仅有一行,包含一个字符串,代表每个村庄的状态 

字符串仅包含'A'、'B'和'.'三种字符,分别代表村庄被部落A占据、被部落B占据,以及无人居住。 

输出:

对于每组数据,输出一行,包含两个整数,分别代表被部落A和B控制的村庄数量

参考答案:对于每组数据,首先遍历整个字符串,遇到'A'则将部落A的数量加一,遇到'B'则将部落B的数量加一。如果遇到'.',则需要判断它两侧是否为同一部落,如果是,则继续累加该部落的数量,否则重置计数。最后输出部落A和部落B的数量。


6、子序列的最大和 

描述: 

从一个序列A中找出一段连续的序列B,序列B称为序列A的“连续子序列”。 

给定一个整数序列nums,找到一个具有最大和的连续子序列(子序列最少包含一个元素),返回其最大和。 

输入: 

共一行,多个整数,整数之间用空格隔开 

输出: 

共一行,一个整数,表示连续子序列的最大和

参考答案:对于这个问题,我们可以使用动态规划的方法来解决。首先,我们定义一个数组dp,其中dp[i]表示以第i个元素结尾的连续子序列的最大和。然后,我们可以使用以下递推公式来计算dp[i]:dp[i] = max(nums[i], dp[i-1] + nums[i])这个递推公式的含义是,以第i个元素结尾的连续子序列的最大和,要么就是第i个元素本身(即nums[i]),要么就是在前一个元素结尾的连续子序列的最大和加上第i个元素(即dp[i-1] + nums[i])。最后,我们遍历整个数组,找到dp数组中的最大值,即为所求的最大和连续子序列的和。


7、最少删除 

描述: 

一个序列的最大公因子是可以整除序列中所有元素的最大正整数。 

给定长度为N的正整数序列(N ≥ 2),最多删除 N-2 个元素,请求出至少需要删除多少个元素,才能使得序列的最大公因子为1。 

输入: 

第一行,一个整数T,代表测试数据的组数。 

接下来T组数据,每组数据有2行: 

第一行,一个整数N。 

第二行,包含N个整数,整数之间用空格隔开。 

输出: 

每组数据输出一行,包含一个整数,代表最少要删除的元素个数。 (如果无法做到,则输出-1。)

参考答案:br />对于每一组测试数据:1. 首先计算原序列的最大公因子GCD。2. 如果GCD等于1,则无需删除任何元素,输出0。3. 如果GCD大于1,计算所有元素的质因数分解。4. 遍历所有质因数,对于每个质因数p,统计原序列中所有能被p整除的元素的个数count(p)。5. 删除count(p) - 1个能被p整除的元素,使得剩余元素的最大公因子不再包含p。6. 重复步骤4和5,直到GCD等于1。7. 输出删除的元素个数。


8、最大矩形面积 

描述: 

给出一个n * n(3 ≤ n ≤ 20 )的二维网格,网格里的数字只有0或1。现在请你计算出只包含1的最大矩形数字和。 (矩形:四个角都是90度的四边形,包含正方形、长方形)。 

输入: 

第一行,一个整数n。 

接下来n行,每行n个数,表示n * n的二维网格。 

输出: 

只包含1的最大矩形数字和。

参考答案:首先,我们需要对输入的二维网格进行处理,将其转化为高度图。高度图是一个新的二维数组,其中每个元素表示以该位置为右下角的最大矩形的高度。然后,我们可以使用单调栈算法来计算最大矩形面积。具体步骤如下:1. 创建一个新的二维数组height,大小为n * n,用于存储高度图。2. 遍历输入的二维网格,对于每个位置(i, j),如果当前位置为1,则height[i][j]为i位置上方连续1的个数,否则为0。3. 对于每一行height[i],使用单调栈算法计算以该行为底的最大矩形面积。4. 将所有行的最大矩形面积中的最大值作为最终答案输出。


喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2022年NOC大赛_Python编程马拉松赛项_决赛_小学高年级组真题参考答案

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share