第 13 题
答案与解析
第(1)小题
1
先筛选负荷率不高于70%的充电站:编号1的负荷率为65%,编号3的负荷率为50%,两者符合条件。再比较距离,编号1距离为5千米,编号3为15千米,因此推荐编号1。编号3虽然负荷率更低,但存在合格充电站时应按距离选择。
第(2)小题
d[i][1]<=70 and (id==-1 or d[i][2]<mdis)
id!=-1
d[m][0]
程序分析
mdis=10000
id=-1; m=0
for i in range(len(d)):
if ①:
...
if d[i][1]<d[m][1]:
...二维列表d的每行保存一个充电站,三列依次为编号、负荷率和距离,且各行已按编号升序排列。循环用下标i逐行检查数据,两个if独立执行,同一行可能同时满足两个条件。
if ①:
id=d[i][0]
mdis=d[i][2]①成立时,id保存当前充电站的编号,mdis保存同一充电站的距离,两者随候选站一起更新。id的初值为−1,可用来区分是否发生过候选站更新;mdis初值为10000。
if d[i][1]<d[m][1]:
m=im从0开始。只有当前充电站的负荷率更低时,才将其下标i赋给m,因此m始终指向已检查充电站中负荷率最低的一个。负荷率相等时不更新;由于按编号升序检查,保留下来的就是同负荷率中编号最小的站。
if ②:
print("距离最近的是",id,"号充电站")
else:
print("负载最低的是",③,"号充电站")遍历结束后,程序需要按题意选择输出分支:存在负荷率不高于70%的充电站时,输出按距离选出的站;否则输出负荷率最低的站。前一分支直接输出id,后一分支需要由m找到对应编号。
填空分析
①
候选站首先必须满足d[i][1]<=70。在此基础上,若尚未找到合格站,应直接接纳;若已有候选站,则仅在当前距离更小时更新。因此填入:
d[i][1]<=70 and (id==-1 or d[i][2]<mdis)
距离比较使用严格小于。距离相等时保留先遇到的站,结合编号升序遍历,即可保证选择编号最小者。外层的负荷条件必须始终成立,不能写成id==-1 or (负荷条件 and 距离条件),否则第一个高负荷站也会被接纳。
若所有距离均小于10000,可简写为d[i][1]<=70 and d[i][2]<mdis;题面未给出这个距离上界,上述写法通过id==-1处理首次接纳,距离达到或超过10000时也能正确选择。
②
按①的条件,只有负荷率不高于70%的站才会更新id。因此id!=-1表示至少找到一个合格站,应输出id;id仍为−1则表示所有站的负荷率均高于70%,应进入else分支。填入:
id!=-1
③
m保存的是负荷率最低站在列表中的下标,d[m][0]才是该站的编号。编号升序不代表编号一定等于下标,因此填入:
d[m][0]
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_05_G3_jingchenglianmeng_q013
