当前位置: 高中信息技术 / 综合题
  • 1. (2019高三下·嘉兴月考) 【加试题】过桥问题。n个旅行者在夜晚要通过一座狭窄的桥,桥上最多只能上2个人且必须借助手电筒,手电筒只有一只。为了所有人在最短时间内过桥,设计算法如下:

    ⑴如果只有1人过桥,时间为个人过桥时间。

    ⑵如果有2人一起过桥,时间以慢的人为准。

    ⑶如果有3个人a、b、C,耗时Ta<Tb<Tc , 过桥方案为让a和b一起过桥,a拿手电筒回来,然后与C一起过桥。

    ⑷如果存在多于3个人,如a、b、……、y、z需要过桥,耗时Ta<Tb<……<Ty<Tx , 这时有两种可选方案,选择其中用时少的,直至剩余少于4人。

    ①最快的1个将最慢的2个分别送过桥。

    a拿手电筒与z过桥,然后a拿手电筒回来再与y一起过桥,a拿手电筒回来;

    ②最快的2个将最慢的2个送过桥。

    让a、b拿手电筒先过桥,a拿手电筒回来,让y、z手拿电筒过桥,然后b拿手电筒回来。

    为验证方案,小明设计了相应的VB程序。首先从数据库中获取每个人的过桥时间,并显示在列表框List1中,单击“计算”按钮Command1,在文本框Text1中输出最短耗时,界面如图a所示。

    1. (1) VB程序代码如下,请在划线处填入合适的代码。

      Dim n As Integer    ‘存放过河人数

      Dim t(1 T0 100)As Integer    ‘存放每个人单独过桥时间

      Private Sub Form_Load()

          ‘从数据库中读取每个人的过桥时间显示在列表框List1中,并统计总人数n,代码

      End Sub

      Private Sub Command1_Cl ick()

          Dim i As Integer,k As Integer,j As Integer,temp As Integer

          Dim sum1  As Integer,sum2 As Integer,tsum AS Integer

          sum1=0:sum2=0:tsum=0

          For i=1 To n-1    ‘对每个人的过桥耗时进行升序排序

              k=i

              For j=i+1 To n

                  If Then k=j

              Next j

              If k<>i Then

                  temp=t(i):t(i)=t(k):t(k)=temp

              End If

          Next i

          i=n

          Do While i>3

              sum1=2*t(1)+t(i-1)+t(i)    ‘方案①

              sum2=t(1)+2*t(2)+t(i)    ‘方案②

              If sum1<sum2 Then

                  tsum=tsum+sum1

              Else

                  tsum=tsum+sum2

              End If

              i=

          Loop

          If i=1 Then    ‘剩下1个人

              tsum=tsum+t(1)

          ElseIf i=2 Then    ‘剩下2个人

              tsum=tsum+t(2)

          Else    ‘剩下3个人

              tsum=

          End If

          Text1.Text=Str(tsum)

      End Sub

    2. (2) 如有5个人,他们单独过桥耗时(单位s)如图b所示,则程序运行后文本框Text2中显示的最短耗时是(s)。

微信扫码预览、分享更方便