K8算法的程序实现综合题 宾馆参会者 入住宾馆 参会者提交

K8算法的程序实现综合题 宾馆参会者 入住宾馆 参会者提交

2024-09-16 07:00:00  鲸学教育
某会务组根据参会者提交的入住宾馆和到达指定上车点时间的信息,安排车辆接送参会者去宾馆。不同
宾馆的参会者分开接送,同一宾馆的参会者可同乘一辆车,每辆车最多接送v人,每个参会者的等待时间都不超过w分钟。参会者入住的宾馆和到达上车点的时间用长度为7 的字符串表示,例如“A-09:15”表示参会者当天入住A宾馆,9点15分到达上车点,如果w为 10,那么该参会者最晚9点25分出发去宾馆。
编写VB程序,统计接送n个参会者所需的最少车辆数。运行程序,列表框List1中按入住宾馆分组显示所有参会者提交的信息,同一宾馆的按时间先后排列。单击“统计”按钮Command1,在文本框 Text1中显示所需的最少车辆数。程序运行界面如第16题图所示。

(1)如图所示,如果每辆车最多接送4人,每个参会者的等待时间不超过10分钟,接送所有到A宾馆
的参会者最少需要      辆车。

(2)实现上述功能的部分VB程序如下,请在划线处填入合适的代码。
'n、v、w是常量
'n为参会人数,v为每辆车最多接送人数,w为参会者最长的等待时间,代码略
Private Sub Form_Load()
'读取n个参会者提交的信息,依次存入a(1)~a(n)
'将a(1)~a(n)按入住宾馆分组,同一宾馆参会者按时间先后排序
'并在List1中显示,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, sum As Integer
a(n + 1) = ""
j= 1 : sum = 0
For i = 2 To n + 1
  If Mid(a(i), 1, 1) <> Mid(a(j),1, 1) Then
     ①     
    j= i
  End If
Next i
Text1.Text = Str(sum)
End Sub
Function getDif(tsl As String, ts2 As String) As Integer
'返回ts1到ts2的时长(单位:分钟),代码略
'例如ts1为"08:30",ts2为"08:35",则返回的函数值为5
End Function
Function getCnt(first As Integer, last As Integer) As Integer
Dim s1 As String, s2 As String
Dim i As Integer, p As Integer, k As Integer,t As Integer
p = first : k = 1
s1 = Mid(a(first), 3, 5)
For i = first + 1 To last
  s2 = Mid(a(i), 3, 5)
  t= getDif(s1, s2)
  If      ②      Then 
    k=k +1
    p = i
     ③     
  End If
Next i
getCnt = k
End Function

【答案】

(1)3    (2) ①sum=sum+getCnt(j,i-1) 或其他等价 答案           ②i-p+1>v Or t>w 或  i-p=v Or t>w  或i-p>=v Or t>w 或其他等价答案         ③s1=s2  或 s1=Mid(a(i),3,5) 或 s1=Mid(a(p),3,5) 或其他等价答案

【本题解析】

本题考查VB基本语句、数组、自定义函数定义和调用等知识。
去A宾馆的第1个参会者到达指定上车地点的时间为08:03,第2个参会者的到达时间为08:38,两者时间超出10分钟,故第1个人单独乘坐一辆车。第3、4、5个参会者的到达时间和第2个参会者的到达时间之差小于10,故第2~5人合乘一辆车,第6人单独乘一辆车,故最少需3辆车。
遍历参会者提交的信息,即数组a,若当前提交信息中的宾馆和前一相邻信息中的宾馆不同,则表示一个同一宾馆的记录已经遍历完毕,j指向该宾馆第一个参会者,i-1指向该宾馆最后一个参会者,调用自定义函数getCnt计算从第j到第i-1个参会者所需的车辆数,累加到sum中,j再调整为i,即指向下一宾馆的第一个参会者,故①处代码为“sum=sum+getCnt(j,i-1)”。
 p指向去某宾馆的第一个参会者,提取该参会者到达指定上车地点的时间存s1,从下一个参会者开始逐个往后遍历,提取当前参会者到达指定上车地点的时间存s2,调用自定义函数getDif(s1,s2)计算这两人到达上车地点的时间差存t,若t大于w,即去该宾馆的第一个上车人的等待时间大于w,则需开新的一辆车子;或该车辆已满,即从第p到第i参会者的人数大于v,也需开新的一辆车子,故②处代码为“t>w Or i-p+1>v”或“t>w Or i-p=v”。车子数量k加1,p调整为i,指向新车辆的第一个上车的人,s1调整为s2,记录该车第一个人的上车时间,故③处代码为“s1=s2”或“s1=Mid(a(i),3,5)”或“s1=Mid(a(p),3,5)”。

专注浙江信息技术辅导,通用技术辅导 鲸学,用心做好技术辅导

预约1对1