十四届蓝桥杯STEMA考试Python真题试卷第一套第四题

来源:十四届蓝桥杯STEMA考试Python真题试卷第一套编程第四题
这个程序虽然代码量不大,但综合运用了多种基础算法和数据结构:贪心策略选择窗口、模拟现实过程、线性查找最小值、效率高(时间复杂度为O(N)O(N)O(N))。

题目描述:

编程实现:某服务大厅同时开放 3 个窗口为客户办理业务,窗口编号分别为 1、2、3。
现有 N(2≤N≤50)位客户需要办理业务,客户编号为 1~N,作为办理业务的先后顺序。
起初三个窗口为空闲状态,空闲的窗口会按照客户编号顺序呼叫下一位客户。如果多个窗口同时为空闲状态,按照窗口编号顺序呼叫(1 优先于 2,2 优先于 3)。
现给出每位客户办理业务的时间(单位:分钟),请计算出 N 位客户全部办理完业务后,哪一个窗口合计办理业务的时间最短,并输出最短时间。

例如:N=7,7 位客户编号分别为 1、2、3、4、5、6、7,客户办理业务时间分别为 3、5、2、4、7、1、6,(如下图):

在这里插入图片描述

初始客户编号为 1、2、3 的客户分别在 1、2、3 窗口同时办理业务;
窗口 3 用时 2 分钟办理完 3 号客户的业务,变为空闲状态,并按顺序呼叫 4 号客户,用时 4 分钟;
窗口 1 用时 3 分钟办理完 1 号客户的业务,变为空闲状态,并按顺序呼叫 5 号客户,用时 7 分钟;
窗口 2 用时 5 分钟办理完 2 号客户的业务,变为空闲状态,并按顺序呼叫 6 号客户,用时 1 分钟;
6 分钟后,窗口 2 和 3 同时变为空闲状态,窗口 2 呼叫 7 号客户,用时 6 分钟。
全部客户办理完业务后,三个窗口总用时分别为 10 分钟、12 分钟、6 分钟,用时最短的是窗口 3,最短时间为 6 分钟。

输入描述:
第一行输入一个正整数 N(2≤N≤50),表示办理业务的客户数第二行输入 N 个正整数(1≤正整数≤50),依次表示每位客户办理业务的时间,正整数之间以一个空格隔开

输出描述:
输出一个整数,表示客户全部办理完业务,用时最短的窗口所用时间,若有多个窗口总用时最短且相同,输出一个即可

样例输入:
7
3 5 2 4 7 1 6

样例输出:
6

参考答案:
这是一个服务窗口排队问题。我们需要模拟整个服务过程,并追踪每个窗口的总服务时间。

# 读取客户数量
N = int(input())

# 读取每位客户的办理时间并转换为列表
times = 
### 十四届蓝桥杯STEMA考试Python真题试卷第一套题目解析和答案详解 以下是对十四届蓝桥杯STEMA考试Python真题试卷第一套的详细解析,涵盖每道的核心知识点及其解答过程。 --- #### **第一:简单整数加法** 该考查的是基本的输入输出操作以及简单的算术运算。程序的功能是从标准输入读取一个整数 $ N $ ,然后将其加上常量值 10 并输出结果[^4]。 ```python # 读取输入的整数 n N = int(input()) # 计算 N + 10 并输出结果 result = N + 10 print(result) ``` 这段代码实现了从用户处接收整数输入,并通过简单的加法规则得出目标值。 --- #### **第二:统计字符串中字符 'a' 的数量** 本主要测试考生对字符串遍历的理解程度以及条件判断语句的应用能力[^3]。以下是参考实现方式: ```python # 读取输入的字符串 s s = input() # 初始化计数器 count count = 0 # 遍历字符串统计 'a' 的个数 for char in s: if char == 'a': count += 1 # 输出结果 print(count) ``` 以上代码采用逐一遍历的方式逐一检查每个字符是否等于 `'a'`,如果匹配成功,则增加计数器的值[^3]。 --- #### **第三:获取字符串最后一个字符** 此部分内容提供了两种不同的解决思路——一种基于索引访问,另一种依赖切片操作[^2]。下面是具体的代码示例: **方法一:使用字符串索引** ```python # 定义函数用于返回字符串最后一位 def get_last_char_index(s): if len(s) > 0: # 判断字符串长度是否大于零 return s[-1] return "" ``` **方法二:使用字符串切片** ```python # 定义函数用于返回字符串最后一位 def get_last_char_slice(s): if len(s) > 0: # 判断字符串长度是否大于零 return s[len(s)-1:] return "" ``` 无论选用哪种方案,都能正确提取出所需的最后一个字符[^2]。 随后,在主程序中调用这些辅助函数即可完成整个流程的设计: ```python # 主程序入口 def main(): # 从标准输入读取字符串 s = input() # 调用其中一个方法打印最后一个字符 print(get_last_char_index(s)) if __name__ == "__main__": main() ``` --- #### **第四:胡萝卜分配问** 这是本次试卷的一道较难的题目,涉及枚举算法与多重循环嵌套技巧。具体来说,需要计算在满足特定条件下,将一定数量的胡萝卜分配给三种颜色兔子的所有可能方案数[^1]。 ```python # 读取胡萝卜总数 N N = int(input()) # 初始化方案计数器 count = 0 # 枚举所有可能的分配情况 for black in range(1, N - 1): # 黑兔至少分得 1 根胡萝卜 for white in range(1, N - black): # 白兔至少分得 1 根胡萝卜 grey = N - black - white # 剩余的胡萝卜全部分给灰兔 # 检查是否满足约束条件 if grey > 0 and black >= white >= grey: count += 1 # 输出最终的结果 print(count) ``` 上述代码利用三层嵌套循环穷举了所有的可能性,并通过一系列逻辑判断筛选出了符合条件的分配方案[^1]。 --- ### 总结 通过对这套试卷各道试的分析可以发现,其涵盖了从基础数据类型的操作到较为复杂的组合数学问等多个层面的内容。这种设计不仅有助于全面评估参赛者的编程水平,还能有效促进他们综合运用所学知识解决问的能力提升。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值