学进去-教育应平等而普惠
试题
类型:操作题
难度系数:0.15
所属科目:高中信息技术
“抢单”是外卖骑手的日常,当外卖平台上一个新的订单出现时,骑手需要在短时间内考虑是否抢单。平台根据骑手的实际信息,给出是否抢单的建议,若建议抢单则给出到达各个取送点的顺序。平台判断是否抢单的算法设计如下:
1)在不改变已有订单各取送点顺序的前提下,将新订单按先取餐后送餐的顺序分别插入原来的路线中,枚举所有新路线;
2)计算新路线路程,并进行判断:每个取送点都有一个系统指定时间,若骑手到达该位置时,时间晚于系统指定时间,则该方案无效;
3)对新路线进行计算和判断后,删除此次枚举的两个插入位置,还原为初始状态,再继续进行下一次枚举;
4)在所有有效方案中,输出总路程最小的方案,若无有效方案,则输出不接单的建议。如果骑手目前无订单在派送中,则插入订单A的方案只有1种,骑手→取餐点A→送餐点A;如果骑手订单中已有1个送餐点A和1个送餐点B,则新订单C有6种插入方案:
方案I:骑手→取餐点C→送餐点C→送餐点A→送餐点B
方案Ⅱ;骑手→取餐点C→送餐点A→送餐点C→送餐点B
方案Ⅲ:骑手→取餐点C→送餐点A→送餐点B→送餐点C
方案IV:骑手→送餐点A→取餐点C→送餐点C→送餐点B
方案V:骑手→送餐点A→取餐点C→送餐点B→送餐点C
方案VI:骑手→送餐点A→送餐点B→取餐点C送餐点C
请回答下列问题:
(1)若骑手仅剩1份餐未送(已取餐),路线为:骑手→送餐点A,新的订单出现后,有________(填数字)种插入方案。
(2)定义如下con(tim)函数进行时间格式转换,将24小时制的“时:分”转换为分,如02:30转换为150,请在划线处填上合适代码。
def con(tim):
     t=________+int(tim[3:])
     return t
(3)定义totd(riderlist,h)函数,其功能为从头指针h进入链表riderlist,按节点先后顺序计算总路程,并判断能否在系统指定时间内到达各取送点,若到达某一取送点时超时返回-1。若链表riderlist如下,
riderlist=[[“u1001”,“119.906033”,“31.014597”,“11:30”,2],
[“s”,“119.921439”,“31.023022”,“11:55”,3],
[“t”,“119.887850”,“31.022861”,“11:40”,1],
[“s”,“119.953836”,“31.021122”,“12:10”,-1]]
第1个元素中“u1001”为骑手编号,“119.906033”和“31.014597”,表示骑手实时位置,“11:30”为实时时间,2为下一节点指针,第2个元素开始,第1项若为“t”表示此元素为取餐点信息,若为“s”表示此元素为送餐点信息.调用函数totd(riderlist,h),risderlist的值如上,h为0,则加框处语句将被执行________次,若将此条件语句改为riderlist[pre][4]!=-1,________(选填:影响/不影响)程序执行。
def   totd(riderlist,h):
     speed=0.3 #speed为骑手每分钟公里数
     total=0
     pre=h
     cur=riderlist[pre][4]
while
          #计算pre与cur两个节点所在位置间的路程,存储在变量d中
          total+=d
          if total/speed>con(riderlist[cur][3])-con(riderlist[h][3]):
               return-1
          else:
               pre=cur
               cur=riderlist[pre][4]
     return round(total,2)
(4)实现是否接单判断的Python部分程序如下,请在划线处填入合适的代码。
def add(oldlist,x,c):#在x所指节点后插入新节点c
     c[4]=oldlist[x][4]
     oldlist.append(c)
     oldlist[x][4]=len(oldlist)-1
     return oldlist
#读取骑手信息,存储在lit中,代码略
tc=[“t”,“119.936506”,“31.008933”,“12:05”,-1]#新订单取餐信息
sc=[“s”,“119.919839”,“31.020183”,“12:22”,-1]#新订单送餐信息
ans=[-1,-1,10000]
head=0
p=head
while p!=-1:
     lit=add(lit,p,tc)
       ____
     while q!=-1:
          lit=add(lit,q,sc)
          tot=totd(lit,head)
          if tot!=-1 and ____
               ans=[p,q,tot]
          lit[q][4]=lit[lit[q][4]][4]
          q=lit[q][4]
     lit[p][4]=lit[lit[p][4]][4]
     p=lit[p][4]
     if ans[2]==10000
          print(“不建议接单,不能在系统指定时间内送达。”)
     else:
          print(“可以接单,建议各取送点到达顺序依次为:”)
#按顺序输出各取送点代码略
编辑解析赚收入
收藏
|
有奖纠错

同类型试题

优质答疑

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

用户名称
2019-09-19

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

用户名称
2019-09-19
我要答疑
编写解析
解析:

奖学金将在审核通过后自动发放到帐

提交
我要答疑
我要答疑:
提交