试题

试题 试卷

logo

题型:综合题 题类:常考题 难易度:困难

浙江省嘉兴市2018-2019学年高三信息技术3月嘉丽联考试卷

【加试题】过桥问题。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)、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)、如有5个人,他们单独过桥耗时(单位s)如图b所示,则程序运行后文本框Text2中显示的最短耗时是(s)。
举一反三
小月设计了一个VB程序,用于对全班55名同学的体质调查分析,该程序能将55名同学的身高与体重录入到数据库中,之后通过如图所示的VB应用程序计算出这些同学的BMI指数,并按BMI指数从小到大进行排序,并显示这些学生的体质情况。

    注:BMI指数的计算公式为:BMI=体重(千克)除以身高(米)的平方(kg/m2)。 BMI<18.5为偏瘦(表明营养不足);BMI=18.5~24.9为体重正常;BMI=25~29.9为超重;BMI>30为肥胖。

该VB应用程序的代码如下:

Dim stuBMI(1 To 55) As Single

Dim stuName(1 To 55) As String

Private Sub Command1_Click()

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

    Dim t1 As Single, t2 As String

    Dim Results As String

    For i = 1 To 54        

        For j = i + 1 To 55

            If stuBMI(j) < stuBMI(k) then      ②    

        Next j

        If  k<>I  Then  

            t1 = stuBMI(i): stuBMI(i) = stuBMI(k): stuBMI(k) = t1

            t2 = stuName(i): stuName(i) = stuName(k): stuName(k) = t2

        End If

    Next i

List1.AddItem "姓名" + vbTab + "BMI指数" + vbTab + "结果"  

    For i = 1 To 55

        If stuBMI(i) < 18.5 Then

            Results = "偏瘦"

        ElseIf stuBMI(i) >= 18.5 And stuBMI(i) < 25 Then

            Results = "正常"

        ElseIf stuBMI(i) >= 25 And stuBMI(i) < 30 Then

            Results = "超重"

        Else

            Results = "肥胖"

        End If

        List1.AddItem stuName(i) + vbTab + str(stuBMI(i)) + vbTab + Results

    Next i

End Sub

Private Sub Form_load()

    Dim conn As New ADODB.Connection

    Dim rs As New ADODB.Recordset

    Dim strSQL As String

    Dim i As Integer

    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + App.Path + "\Student.accdb"

    conn.Open

    strSQL = "SELECT * FROM Student"

    Set rs.ActiveConnection = conn

    rs.Open strSQL

    i = 0

    Do While Not rs.EOF

        i = i + 1

        stuName(i) = rs.Fields("StuName")

        stuBMI(i) = Round(rs.Fields("Weight") / rs.Fields("height") ^ 2, 1)

        rs.MoveNext

    Loop

    rs.Close

    conn.Close

    Set rs = Nothing

    Set conn = Nothing

End Sub

返回首页

试题篮