2024年3月宁波十校高三联考信息技术卷 Word版含解析

文档属性

名称 2024年3月宁波十校高三联考信息技术卷 Word版含解析
格式 docx
文件大小 197.8KB
资源类型 教案
版本资源 通用版
科目 信息技术(信息科技)
更新时间 2024-03-23 07:21:02

图片预览

文档简介

宁波“十校”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. 该系统中参观者的购票数据、参观路线一般存储在数据库中
【答案】D
1
(
【解析】
(本题考查信息系统组成)
【推荐指数】
★★
(常规概念题)
A.
手机应用程序是应用软件;
B.
该系统中的用户包括全体参观者、使用者、维护者、开发者等;
C.
该系统的运
行需要通信网络去完成购买等各项服务;
D.
该系统中参观者的购票数据、参观路线一般存储在数据库中
)
4. 下列关于该信息系统功能和应用的说法, 不正确的是
A. 该系统基于数据分析, 支持科学决策
B. 该售票系统简单易用,不存在技术门槛
C. 断电后该系统无法运行, 体现了系统对外部环境有依赖性
D. 参观者向系统提交购票数据、参观路线等, 体现了数据的收集和输入功能
【答案】B
(
【解析】
(本题考查信息系统功能和应用)
【推荐指数】
★★
(常规概念题)
B.
该售票系统简单易用,但是依旧存在技术门槛(
手机、打字等都算是门槛)
)
5. 智能手机已广泛应用到人们的日常生活中,下列说法不正确的是
A. 智能手机是一种最常见的移动终端设备
B. 参观者将电子门票保存到手机后,存储在 RAM 中
C. 影响智能手机的主要性能指标有 CPU、存储和屏幕分辨率等
D. 手机出示二维码检票时,屏幕会根据环境自动调节亮度,主要依赖光线传感器的植入
【答案】B
(
【解析】
(本题考查移动终端)
【推荐指数】
★★
(常规概念题)
B.
参观者将电子门票保存到手机后,存储在
R
OM

)
6. 下列关于网络系统的说法,正确的是
A. 传输控制协议负责将信息从一个地方传送到另一个地方
B. 构建家庭网络时, 往往将无线终端与路由器的 LAN 口连接
C. 数据通信是通信技术和计算机技术相结合而产生的一种通信方式
D. 手机之间通过移动通信网络通信时,一部手机可以直接将信号传递给另一部手机
【答案】C
(
【解析】
(本题考查网络系统)
【推荐指数】
★★
(常规概念题)
A.
网际协议负责将信息从一个地方传送到另一个地方
B.
构建家庭网络时,
往往将有线终端与路由器的
LAN
口连接
D.
手机之间通过移动通信网络通信时,一部手机不可以直接将信号传递给另一部手机
)
7. 某段未经压缩的音频,采样频率是 44. 1kHz,量化位数为 8b,下列说法正确的是
A. 声音数字化需要经过采样和量化两个过程
B. 该音频数字化时, 量化值取值范围为 1~256
2
C. 用手机播放音频的过程实现了信号的数模转换
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. 最后一个出栈的元素一定是 e
C. 最后一个出栈的元素一定是 a D. a ,b ,c 出栈的先后顺序不确定
【答案】A
(
【解析】
(本题考查栈)
【推荐指数】
★★
d

1
个出栈,
所以
a

b

c
一定在栈内,则根据先进后出原则,
c
一定比
a

b
先出
栈。
)
10. 有如下 Python 程序段:
import random
def binary(L,R,key):
m=(L+R)//2
ifL>R:
return L
if 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+1
print(binary(0,7,x))
执行该程序段后,输出结果不可能是
3
A. 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
=3
L=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 += 1
if c[p]==-1:
c[p]=b[i];tot+=1
else:
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)
应填写

而非

。从
to
t=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]]
4
p=head=0
flag =1;step=3
for i in range(2):
flag=-flag
p=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=True
5
for i in range(start,end):
if ③ :
flag=False
break
if 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
(已预约)
5
3
-3
4
2
-2
3
3
-3
2
1
-1
1
2
-2
stations
1
2
3
4
5
6
7
8
9
10
diff
0
5
1
2
1
0
-3
-3
-3
count
0
5
6
8
9
9
6
3
0
根据题干
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
上下车的人数的总和。故
for
k
为从
1

diff
中的值的和,故②为
1

j+1

flag==False
表示该订单未能预约成功。当该站点原有人数
+
新订单人数超过
total

12

),
则不能预约
成功, 故③处为
_count[j]+num>t
otal
)
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,df
1.
检测值。故答案选
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:20
2 联想 ABC 20 9:30
9
3 套圈 5 9:00
4 趣味画 10 9:10
(2)定义如下函数 time(),将结束时间(格式:“ 时:分” )转换为分钟,请在划线处填入合适的代码。 def time():
for x in activity: # 列表 activity 存储活动项目数据
y=x[3]
for j in range(len(y)):
if y[j]==":":
break
t= ▲
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=[""]*n
head=tail=0
total=0
for i in range(n):
if total+activity[i][2]<=activity[i][3]:
que[tail]=activity[i]
tail+=1
total+=activity[i][2]+10
elif head!=tail and que[head][2]>activity[i][2]:

head+=1
que[tail]=activity[i]
tail+=1
temp=que[tail-1]
j=tail-2
while ② :
10
que[j+1]=que[j]
j-=1
que[j+1]=temp
print("最多可以参加的活动项目数量是:", 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:20
2 联想ABC 20 9:30
3 套圈 5 9:00
4 趣味画 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到2
for 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 += 1
total += activity[i][2] + 10 #更新当前时间total
elif head != tail and que[head][2] > activity[i][2]: #当前活动限时小于已选择的最长活动
11
(
que[tail]=activity[i]
) (
j=
tail
-2
) (

#
total +=
activity[i][2] - que[head][2]
用当前活动替换队
列头的活动,并重新
计算
total
head +=
1
que[tail] = activity[i]
tail +=
1
temp = que[tail -
1] #
去队列最后一个元素
j = tail - 2 #j
从后向前遍历队列
while

: #
j
>=
head
and
temp[2]
>
que[j][2]
队列没有到头且
temp
大于
j
元素
,就向
前找
que[j+1] = que[j]
j
-=
1
que[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 in
range(n):
)
(
if
total+activity[i][2]<=activity[i][3]:
#total
为参加了活动的结束时间
)
(
tail+=1
) (
total+=activity[i][2]
+10
) (
elif
head!=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
同课章节目录