资源简介 宁波“十校”2024 届高三 3 月联考 技术试题卷解析信息技术(共 50 分)1. 下列关于数据与信息的说法,不正确的是A. 在计算机中, 数据一般以文件的形式存储B. 存储信息的载体遭到破坏,其承载的信息会消失C. 大数据需要特定的技术和分析方法将其转化为价值D. 预订车票时, 余票的数量是数据, 座位等级不是数据【答案】D(【解析】(本题考查数据与信息)【推荐指数】★★(常规概念题)数据是对客观事物的符号表示。D:预订车票时,余票的数量是数据,座位等级也是数据)2. 下列关于人工智能的说法,正确的是A. 深度学习需要手工构造知识库B. 强化学习是从过去的经验中不断学习,提升能力C. 行为主义人工智能中,智能行为就是对符号的推理和运算D. 混合增强人工智能中, 以人工智能为主,人类智能为辅助【答案】B(【解析】(本题考查人工智能)【推荐指数】★★(常规概念题)A.深度学习从数据出发, 学习数据中蕴含的概念或模式, 不需要手工构造知识库;B.强化学习是根据结果反馈来调整相应的学习方法,即从过去的经验中不断学习,提升能力;C.符号主义人工智能中,智能行为就是对符号的推理和运算;D.混合增强人工智能中,人类智能和机器智能彼此协调、相互取长补短,但是人类智能是“智能回路”的总开关)阅读下列材料, 回答第 3 至 5 题:某科技馆售票系统,参观者可以通过科技馆官方网站或手机应用程序购买门票,并可以选择将电子门票保存 到手机上, 可用电子门票或二维码等电子形式进行检票。系统通过收集和分析参观者的购票数据、参观路线和参 与活动情况,优化展览设计和活动策划, 并对参观者流量和使用情况进行实时监控和统计, 为科技馆的管理决策 提供科学依据。3. 下列关于该信息系统组成的说法,正确的是A. 手机应用程序是系统软件B. 该系统中的用户就是全体参观者C. 该系统的运行可以没有通信网络D. 该系统中参观者的购票数据、参观路线一般存储在数据库中【答案】D1(【解析】(本题考查信息系统组成)【推荐指数】★★(常规概念题)A.手机应用程序是应用软件;B.该系统中的用户包括全体参观者、使用者、维护者、开发者等;C.该系统的运行需要通信网络去完成购买等各项服务;D.该系统中参观者的购票数据、参观路线一般存储在数据库中)4. 下列关于该信息系统功能和应用的说法, 不正确的是A. 该系统基于数据分析, 支持科学决策B. 该售票系统简单易用,不存在技术门槛C. 断电后该系统无法运行, 体现了系统对外部环境有依赖性D. 参观者向系统提交购票数据、参观路线等, 体现了数据的收集和输入功能【答案】B(【解析】(本题考查信息系统功能和应用)【推荐指数】★★(常规概念题)B.该售票系统简单易用,但是依旧存在技术门槛(手机、打字等都算是门槛))5. 智能手机已广泛应用到人们的日常生活中,下列说法不正确的是A. 智能手机是一种最常见的移动终端设备B. 参观者将电子门票保存到手机后,存储在 RAM 中C. 影响智能手机的主要性能指标有 CPU、存储和屏幕分辨率等D. 手机出示二维码检票时,屏幕会根据环境自动调节亮度,主要依赖光线传感器的植入【答案】B(【解析】(本题考查移动终端)【推荐指数】★★(常规概念题)B.参观者将电子门票保存到手机后,存储在ROM中)6. 下列关于网络系统的说法,正确的是A. 传输控制协议负责将信息从一个地方传送到另一个地方B. 构建家庭网络时, 往往将无线终端与路由器的 LAN 口连接C. 数据通信是通信技术和计算机技术相结合而产生的一种通信方式D. 手机之间通过移动通信网络通信时,一部手机可以直接将信号传递给另一部手机【答案】C(【解析】(本题考查网络系统)【推荐指数】★★(常规概念题)A.网际协议负责将信息从一个地方传送到另一个地方B.构建家庭网络时,往往将有线终端与路由器的LAN口连接D.手机之间通过移动通信网络通信时,一部手机不可以直接将信号传递给另一部手机)7. 某段未经压缩的音频,采样频率是 44. 1kHz,量化位数为 8b,下列说法正确的是A. 声音数字化需要经过采样和量化两个过程B. 该音频数字化时, 量化值取值范围为 1~2562C. 用手机播放音频的过程实现了信号的数模转换D. 该音频数字化时, 每分钟的采样样本数为 44100 个【答案】C(【解析】(本题考查信息编码)【推荐指数】★★★★A选项, 数字化需要经过采样、量化、编码三个过程。B选项,8b的量化值取值范围是0~255。D选项,44.1kHz说明每秒采样样本数是44100)8. 某完全二叉树, 中序遍历结果为“ 甲乙丙丁” ,则后序遍历结果是A. 甲乙丁丙 B. 丙乙甲丁 C. 甲丁丙乙 D. 乙丁丙甲【答案】A(【解析】(本题考查二叉树)【推荐指数】★★根据节点数,以及完全二叉树画出二叉树结构图,再根据中序遍历。所以后序遍历是甲乙丁丙。○丙○乙○丁○甲)9. 有一个空栈, 若元素入栈的顺序是 a ,b ,c ,d ,e ,第 1 个出栈的元素是 d,则当所有元素都出栈后,下列说 法正确的是A. c 一定比 a ,b 先出栈 B. 最后一个出栈的元素一定是 eC. 最后一个出栈的元素一定是 a D. a ,b ,c 出栈的先后顺序不确定【答案】A(【解析】(本题考查栈)【推荐指数】★★d第1个出栈,所以a、b、c一定在栈内,则根据先进后出原则,c一定比a和b先出栈。)10. 有如下 Python 程序段:import randomdef binary(L,R,key):m=(L+R)//2ifL>R:return Lif key<=a[m]:return binary(m+1,R,key)else:return binary(L,m-1,key)a=[9,8,7,7,7,5,5,3]x=random. randint(1,4)*2+1print(binary(0,7,x))执行该程序段后,输出结果不可能是3A. 2 B. 5 C. 7 D. 8【答案】A(【解析】(本题考查二分查找和递归算法)【推荐指数】★★x的值可能是3,5,7,9。a=[9, 8,7,7,7, 5,5, 3 ],则x=3时,L=8,x=5时,L=7,x=7时,x=9 x=7 x=5 x=3L=5,x=9时,L=1.)11. 用数组 a 和 b 存储两个降序序列,用数组 c 存储合并后的降序序列。如 a = [19,16,12,8,5],b = [20,15,14,10,6], c=[20,19,16,15,14,12,10,8,6,5]。实现该功能的程序段如下:c = [- 1]*(len(a)+len(b))p = 0;tot=len(a)for i in range(len(a)):(1)for i in range(len(b)):while b[i]p += 1if c[p]==-1:c[p]=b[i];tot+=1else:for j in range( (2) ):c[j+1] = c[j]c[p] = b[i]tot+=1上述程序段划线处可选代码为:①c. append(a[i]) ②c[i]=a[i] ③tot,p-1,- 1 ④tot,p,-1 ⑤tot-1,p-1,- 1则(1)(2)处的代码依次为A. ①③ B. ①④ C. ②⑤ D. ②③【答案】C(【解析】(本题考查插入排序)【推荐指数】★★★已知c已赋长度,因此(1)应填写②而非①。从tot=len(a),可知tot表示数组的最后个元素的后一个位置或数组的元素个数。例如c=[10,20,30,40,-1,-1…],tot=4,因此向后移动时,先执行c[4]=c[3],因此(2)填写⑤)12. 有如下 Python 程序段:(def)poem(lst,q,flag):st=""for i in range(7):st+=lst[q][0]q=lst[q][flag]print(st)hw=[["冬",-1,1],["梅",0,2],["枝",1,3],["几",2,4],["点",3,5],["雪",4,6],["花",5,7],["开",6,8],["春",7,9],["信",8,10],["来",9,0]]4p=head=0flag =1;step=3for i in range(2):flag=-flagp=hw[head][flag]poem(hw,p,flag) #①for j in range(step):p=hw[p][flag]poem(hw,p,flag) #②关于上述程序段的说法, 不正确的是A. 语句①第一次执行时,输出“梅枝几点雪花开”B. 语句②第二次执行时,输出“开花雪点几枝梅”C. 若加框处语句改为 flag+=(-1)**i,不会影响程序运行结果D. 若将 hw 中的 ["梅",0,2]修改为["梅",0,3],输出结果将不含文字“枝”【答案】D(【解析】(本题考查链表)【推荐指数】★★★★原循环双向链表是冬→梅→枝→几→点→雪→花→开→春→信→来→冬, 第1次从p节点开始输出七言, 再跳3个节点,继续输出七言。第2次反向从p节点开始输出七言,再跳3个节点,继续输出七言。因此依次输出4句话是梅枝几点雪花开,点雪花开春信来,来信春开花雪点, 开花雪点几枝梅。因此AB选项正确。C选项,i=0时,flag+=(-1)**i=2,切片效果等效flag=-1。i=1时,flag+=(-1)**i=1。因此C也正确。D选项,修改后, 第4次输出还是含有枝。)13. 某网约巴士, 车上最初有 12 个空座位, 从起点站向终点站行驶, 不允许掉头或改变方向, 现有新的订单, 请 判断其是否能预约成功。请回答下列问题:(1)若网约巴士已预约成功的数据为: [2,1,5],[1,3,7],[3,2,8],[2,4,7],[3,5,10],其中每个元素有 3 个数据项, 分别表示预约人数、出发站点和到达站点, 当前接到订单[4,5,8],▲ (选填: 能/不能)预约成功。(2)实现上述功能的部分 python 程序如下, 请在划线处填入合适的代码。#数组 trips 存储预约信息,trips[i]=[num, start, end]表示第 i 个预约信息有num 个乘客,出发站点为 start, 到达站点为 end,站点编号为 1~10。total=12 #空座位总数stations=10 #站点总数diff=[0]*(stations+1)count=[0]*(stations) #存储站点上下车后的乘客人数for i in trips:①diff[i[2]]-=i[0]for j in range(1,stations):for k in range( ② ):count[j]+=diff[k]num=int(input("请输入乘车人数: "))start=int(input("请输入出发站点编号: "))end=int(input("请输入到达站点编号: "))flag=True5for i in range(start,end):if ③ :flag=Falsebreakif flag:print("预约成功, 请到站点等候! ")else:print("该订单未能成功预约到即将驶来的 bus!")【答案】(1)不能(1分)(2)①diff[i[1]]+=i[0](2分);②1,j+1 或 0,j+1 或 j+1 或 j,0,-1,或 j,-1,-1 或其他等价答案(2分)③count[i]+num>total 或 num>total-count[i]或其他等价答案(2分)(【解析】(本题考查数组)【推荐指数】★★★(1)由预约数据分析可以得到下方左边的图示过程(与第2小题的思路稍有不同),站点5的空位数只有3个,订单[4,5,8]不能预约成功。(2)遍历每个订单,diff[i[2]]-=i[0]记录了每个订单在达到站点下车人数,①处要记录每个订单在出发站点上车人数diff[i[1]]+=i[0];遍历每个站点,count[j]+=diff[k]在统计j站点车上的总人数,又因为diff中记录了每个站点的上下车数据,因此每个站点的总人数等于该站点及前面所有站点的上下车数据之和,因此②处k要遍历第1个站到第j个站点, 填1,j+1或0,j+1或j+1或j,0,-1,或j,-1,-1,第(1)小题例子用该算法的计算过程如上方右边图所示;(3)若新订单的预约站点区间存在座位不够的情况则预约失败, ③处填count[i]+num>total或num>total-count[i]。)(【解析】(本题考查数组的应用)【推荐指数】★★★★trips(已预约)53-342-233-321-112-2stations12345678910diff051210-3-3-3count056899630根据题干trips存储了预约信息例如[[2,1,5],[1,3,7],[3,2,8],[2,4,7],[3,5,10]])6(浏览器1) (Web服务器) (IoT模块) (智能终端) (浏览器2) (第14题图a) (diff存储对应站点人员变化情况, 上车用+人数,下车用-人数。变化情况入上图。(1)count为该站点上下车后的乘客人数,从上表可知,站点5乘客上下车后人数为9,若当前订单为[4,5,8] ,车子座位总数为12,9+4大于12故不能预约成功。(2)①该程序段为遍历trips数据,将对应的人员变化添加到对应的diff中。第1次i为[2,1,5]即在站点1有2个人上车,故diff[[i[1]]+=i[0](即diff[1]+=2),站点5这两个人下车diff[[i[2]]-=i[0](即diff[5]-=2),因此①处为diff[[i[1]]+=i[0]。②题干中已经表明count[j]为站点j乘客人数,即从站点1到站点j上下车的人数的总和。故fork为从1到diff中的值的和,故②为1,j+1③flag==False表示该订单未能预约成功。当该站点原有人数+新订单人数超过total(12人),则不能预约成功, 故③处为_count[j]+num>total)14. 小丁同学发现小区附近的路灯开启时间不合理, 他设计并搭建了一个光线监测系统, 传感器采集光线值由智 能终端经 IoT 模块发送到 Web 服务器,当光线值低于阈值时蜂鸣器播放音频,小丁和路灯管理人员可以通 过浏览器查看历史数据。请回答下列问题:①(互联网)②(1)第 14 题图 a 中①和②处的设备依次为 ▲ (单选,填字母:A. 执行器、传感器/ B. 传感器、执行 器)。(2)关于该系统的说法正确的是 ▲ (多选, 填字母)A. 浏览器可直接访问数据库来获取历史数据B. 该系统软件架构的优势之一是方便升级和维护C. 在硬件搭建时需要考虑智能终端与 IoT 模块之间的接口匹配问题D. 根据数据的存储要求, 确定数据库的结构, 该过程属于前期准备中的概要设计 (注:全部选对的得 2 分, 选对但不全的得 1 分, 不选或有选错的得 0 分)7(3)小丁基于 Flask Web 框架编写服务器端的程序,部分代码如下。若要通过浏览器获取视图函数 hello()返 回的页面, 则应访问的 URL 是 http:// ▲ 。#导入 Flask 框架模块及其他模块, 代码略app=Flask(__name__)@app. route("/show")def hello():#从数据库中读取光线数据,并返回页面,代码略#服务器其他功能,代码略if name ==" main ":app. run(host=" 192. 168. 43. 17", port=8080)(4)小丁在系统开发完成后, 想从多角度观察程序运行时是否有错误。该系统每隔 5 分钟采集一次数据,当 小丁测试时,光线值一直高于阈值, 系统运行正常。小丁想立刻观察当光线值低于阈值时, 蜂鸣器能否 播放音频,请你帮助小丁设计可行方案。(注:本系统中光线传感器和蜂鸣器正常,并且与智能终端的 连接正常。请回答两项, 1 项正确得 1 分)(5)小丁将系统中 2024-01-01 到 2024-01-07 的每天 17:00- 18:00 数据导出,保存在 light. csv 文件中, 部分数据 如第 14 题图 b 所示,统计每天该时间段中光线值小于 100 的次数, 并绘制如第 14 题图 c 所示线形图, 部分 Python 程序代码如下:(第14题图b第14题图c)df=pd. read_csv("light. csv")day=[]for data in df["上传时间"]:day. append(data[8:10])df. insert(0,"日期",day) #插入列df=df[ ]df1=df. groupby("日期"). count()plt. plot( )#设置绘图参数,代码略①请在划线处填入合适的代码。②小丁要绘制如第 14 题图 c 所示线形图, 则方框中应填入的正确代码为 ▲ (单选, 填字母)A. df1. 日期,df1. 检测值 B. df1. index,df1. 检测值 C. df1. index,df1. values【答案】(1)A(1分)(2)B C(2分)(3)192.168.43.17:8080/show (1分)(4)①将光线传感器置于黑暗的环境中;②将程序代码中的阈值调整到足够大;或其他等价答案;注:回答两 项, 1项正确得1分,共2分(2分)(5)①df. 检测值<100 或 df[“检测值”]<100 (2分)②B(2分)(【解析】(本题考查信息系统搭建和pandas数据处理))8(【推荐指数】★★★(本题考点较为常规,题目较为简单,可以作为保温练习)(1)传感器采集到数据发送给智能终端,智能终端将指令发给执行器,因此①处是执行器;②处是传感器。答案选A。(2)A.浏览器需要访问服务器才能获取历史数据。B.正确。C.正确。D.根据数据的存储要求,确定数据库的结构属于详细设计。答案选BC。(3)要通过浏览器获取视图函数hello()返回的页面, 需要正确的服务器地址、端口以及路由,URL是:http://192.168.43.17:8080/show。(4)题干中提到想立刻观察当光线低于阈值时,蜂鸣器能否播放音频。可行的方案为:①将光线传感器置于黑暗的环境中②将程序代码中的阈值调整到足够大或其他等价答案。(5)要统计每天该时间段中光线值小于100的次数,所以得对检测值进行筛选,语句为df=df[df.检测值<100]。故答案为df.检测值<100或df[“检测值”]<100。根据df1=df.groupby(“日期”).count()可知,日期已经作为索引,最后形成的是DataFrame对象,因此绘制线型图时,应该用df1.index,df1.检测值。故答案选B。)(【解析】(本题考查信息系统和Pandas)【推荐指数】★★★(1)在信息系统中,传感器向智能终端中传输收集到的数据;智能终端向执行器发送指令,执行相应操作。则①处为执行器,②处为传感器,选A。(2)当需要查询数据时,浏览器主要向服务器发送对应的请求, 服务器再从数据库中读取相应数据,则A错。该信息系统架构为B/S架构,其优势之一为方便升级和维护,则B对。由于不同的智能终端和IoT模块,连接方式可能会有不同,故需要考虑只能终端和IoT模块之间的连接关系型,则C对。确定数据库的结构属于需求分析中的详细设计,则D错。选B、C。(3)根据代码,确定IP地址为192.168.43.17,端口号为8080,路由地址为/show,则完整地址为192.168.43.17:8080/show。(4)根据题干要求,需要测试光线低于阈值时,蜂鸣器能否正常播放。从系统测试角度, 可以从硬件测试和软件测试两个角度取设置。从硬件角度,可以选择遮挡光线或将光线传感器置于黑暗的环境中去测试。从软件角度,可以考虑将程序代码中的阈值调整到足够大去测试。(5)代码首先从light.csv中读取数据,之后在df中插入“日期”列,记录当前日期。之后要对每天该时间段中光线小于100的次数进行统计, 则可知划线处为筛选操作,筛选条件为小于100次,则答案为df.检测值<100,下一行代码对日期进行分组统计,由于默认as_index取值为True,则将日期列变为索引列,即df1.index,则最后绘制图像时,选择的x轴为df1.index,y轴为df1.检测值。则答案选B。)15. 某学校举行游园活动, 有 n 个限时活动项目(如 5 分钟夹珠),活动项目编号为 1~n ,每个活动项目从上午 8:30 开始, 结束时间不一定相同。考虑到活动场地间的距离, 活动规定:参加前一个活动后,需间隔 10 分 钟再参加下一个活动,每个同学不能同时进行两个及两个以上的活动。小丁同学对 n 个游园活动项目都非常感兴趣,但是时间有限,他最多可以参加几个活动项目?编写程序 模拟计算过程, 从结束时间最早的活动项目开始选择, 如果完成该项活动的时间不超过该项目结束时间, 选 择该活动,如果超出结束时间,则考虑是否可以替换之前选中的某个活动,使完成已选项目的时间尽可能少。 请回答下列问题:(1)若活动项目数据如下图所示, 则最多可以参加的活动项目数量为 ▲ 。编号 名称 限时 结束时间1 夹珠 5 9:202 联想 ABC 20 9:3093 套圈 5 9:004 趣味画 10 9:10(2)定义如下函数 time(),将结束时间(格式:“ 时:分” )转换为分钟,请在划线处填入合适的代码。 def time():for x in activity: # 列表 activity 存储活动项目数据y=x[3]for j in range(len(y)):if y[j]==":":breakt= ▲x[3]=t-510 #开始时间 8:30 为 510 分钟(3)定义如下 sort(x)函数, 参数 x 为活动项目数据,按照结束时间进行升序排序。def sort(lst):n=len(lst)for i in range(n,1,- 1):for j in range(1,i):下列选项中,可填入方框中的正确代码是 ▲ (单选,填字母)。A. iflst[j] >lst[j+1]: lst[j],lst[j+1]=lst[j+1],lst[j] B. iflst[j] C. iflst[j][3]lst[j+1][3]: lst[j],lst[j+1]=lst[j+1],lst[j](4)实现程序功能的部分代码如下, 请在划线处填上合适的代码。‘’’读取 n 个活动项目的数据, 存储在列表 activity 中,每个元素有四个数据项, 分别为编号,名称, 限时, 结束时间, 如[1,"夹珠",5,"9:20"],代码略。‘’’time()sort(activity)que=[""]*nhead=tail=0total=0for i in range(n):if total+activity[i][2]<=activity[i][3]:que[tail]=activity[i]tail+=1total+=activity[i][2]+10elif head!=tail and que[head][2]>activity[i][2]:①head+=1que[tail]=activity[i]tail+=1temp=que[tail-1]j=tail-2while ② :10que[j+1]=que[j]j-=1que[j+1]=tempprint("最多可以参加的活动项目数量是:", tail-head)【答案】(1)3;(2)int(y[:j]) * 60 + int(y[j + 1:]) 或 int(y[0:j]) * 60 + int(y[j + 1:len(y)]) 等类似答案(3)C (4)①total += activity[i][2] - que[head][2];②j >= head and temp[2] > que[j][2] 或 j >= head and temp[2] >= que[j][2] 或类似答案【解析】 (本题考查字符转换、冒泡排序和队列维护)【推荐指数】★★(第1-3题难度不大,第4题算法不够好)(1)根据题目规则, 如下表的数据选择过程为:编号 名称 限时 结束时间1 夹珠 5 9:202 联想ABC 20 9:303 套圈 5 9:004 趣味画 10 9:10第1个选择:选3号活动套圈,且完成时间是8:35,小于结束时间9:00,+10分钟后为8:45;第2个选择: 选4号活动趣味画, 且完成时间是8:55,小于结束时间9:10 ,+10分钟后为9:05; 第3个选择: 选1号活动夹珠,且完成时间是9:10,小于结束时间9:20,+10分钟后为9:20;第4个选择: 选2号联想ABC,且完成时间是9:40,大于结束时间9:30,且该活动完成时间最长, 不能替换 前面已有的活动,故不选择该活动;所以最多参加3个活动,分别是3号、 4号和1号活动。(2)time()函数中,用一个j循环找到“: ”所在的位置,则从0位置到j-1位置是小时数据, j+1到末尾是分钟数 据,且统一换算成分钟的公式是:小时*60+分钟,故答案是int(y[:j]) * 60 + int(y[j + 1:]) 或 int(y[0:j]) * 60 + int(y[j + 1:len(y)])(3)sort(x)函数,将列表x按照结束时间升序排列, 从题目所给的数据来看, 结束时间在列表x的第4列;从题 目所给的代码可以, 该排序是冒泡排序, 外循环i从n到2,内循环j从1到i,即从前向后冒泡, 则应当是大 数向后沉, 结合以上分析,题目中冒泡部分代码如下注释:for i in range(n, 1, - 1): #循环n-1次, i从n到2for j in range(1, i): #每次循环从1到i,从前向后冒泡iflst[j][3] < lst[j- 1][3]: #若前一个元素j-1的结束时间大于后一个元素j lst[j],lst[j- 1] = lst[j- 1],lst[j] #将前一个元素j-1换到j(4)算法整体分析:第一步,将所有活动按照结束时间从小到大排序;第二步,从第一个活动开始,逐个选择活动, 并计算完成时间到total变量中,选择逻辑为: 若total + 限时 < 结束时间, 将活动记录到que队列的末尾;若total + 限时 > 结束时间, 则看que队列中最大的元素的限时是否大于当前活动,若大于则用 当前活动替换原来活动, 否则就放弃这个活动。每一次修改过que后,都从后向前做一次插入排序,保持que中元素是从大到小的关键代码注释及答案如下:for i in range(n):if total + activity[i][2] <= activity[i][3]: #当前活动完成后累积时间小于结束时间 que[tail] = activity[i] #将当前活动放到队列末尾tail += 1total += activity[i][2] + 10 #更新当前时间totalelif head != tail and que[head][2] > activity[i][2]: #当前活动限时小于已选择的最长活动11(que[tail]=activity[i]) (j=tail-2) (①#total +=activity[i][2] - que[head][2]用当前活动替换队列头的活动,并重新计算totalhead +=1que[tail] = activity[i]tail +=1temp = que[tail -1] #去队列最后一个元素j = tail - 2 #j从后向前遍历队列while②: #j>=headandtemp[2]>que[j][2]队列没有到头且temp大于j元素,就向前找que[j+1] = que[j]j-=1que[j+1] = temp #找到temp插入位置,插入)【解析】 (本题以游园活动的简单进程为依托,考查了字符串、排序、数组、插入排序等知识)(【推荐指数】★★★★(题目难度不大,有利于学生考场正常发挥))((1)依据题目表述,从结束时间最早的活动项目开始选择,那么先选择套圈,结束时间为8:35,间隔10分钟)(后,选择趣味画,结束时间为8:55,间隔10分钟后,选择夹珠, 结束时间为9:10,间隔10分钟后, 若选择)(联想ABC,则超出该活动的结束时间,也无法替换前面消耗时间最长的活动。所以最多可以参加的活动)(项目数量为3。)((2)自定义函数time()实现了将时间格式转换成分钟格式,考查了字符串的切片操作。空格所在处应该是将)(“时: 分”的两部分内容转换为分钟,所以为int(y[:j])*60+int(y[j+1:])。)((3)A、B选项排序的关键字都是错误的,是按照活动的结束时间升序排序。D选项缺了最左边两个元素的比)(较排序。C选项正确。)((4))(time())(sort(activity))(que=[""]*n)(head=tail=0)(total=0)(for i inrange(n):)(iftotal+activity[i][2]<=activity[i][3]:#total为参加了活动的结束时间)(tail+=1) (total+=activity[i][2]+10) (elifhead!=tail and que[head][2]>activity[i][2]:) (①) (head+=1) (que[tail]=activity[i]) (tail+=1)#新的活动参加后修改活动排列顺序为按活 动时长降序排序,为了替换时直接替换掉活 动序列中的最前面的活动项目。此处用了插 入排序算法。这里要注意的是 j 是已排序的 活动范围,那么最前面的位置应该是 head, 而不是 0,序列中替换的活动没有删除,而是 用队列出队的思想解决的。 (temp=que[tail-1])所以, 此处为 j>=head and temp[2]>que[j][2](while②:) (que[j+1]=que[j])#无法参加 i 项活动,则考虑替换活动时间 较长的项目替换后, 修改活动结束时间 (j-=1)total 为减去活动减少的时间。所以为 (que[j+1]=temp)total+=activity[i][2]-que[head][2](print("最多可以参加的活动项目数量是:", tail-head))12 展开更多...... 收起↑ 资源预览