1. 老张要准备一道晚宴,需要上n个菜,为了省事他在n个不同的餐厅订好了这些菜。现在他需要尽快取回这些菜,对于每一道菜,有两种取菜方式:

1)让各店的外卖员送货上门,对于第i个菜需要花费a(i)的时间。

2)自己去餐厅取回家,每次出门仅能取回一道菜,对于第i个菜,从出门到回家整个过程需要花费b(i)的时间。

每家餐厅都有各自的外卖员送菜,并且无论老张是否在家,他们都能把菜送到。为了节省时间,能由外类员送的菜尽量由外卖负各自送达,现在需要知道最少花费多少时间能集齐所有的菜。

比如n=4,a(i)=(30,70,40,50),b(1)=(20,10,20,30},那么花费时间少的方案是第一个菜和第三个菜让让外卖员送,第二个菜和第四个菜老张自己取,一共需要40分钟。

设计VB程序计算最少时间,界面如下图

实现上述功能的VB程序如下,回答以下问题:

(1) 根据程序语句判断对象Lab3属于类。

(单选,填字母:A .Form1/B .Label /C .TextBox / D .CommandButton)

(2) 请在划线处填入合适的代码。

Const n=4

Dim a(1 To n) As Integer    'n道菜由每家餐厅外卖员送达耗时

Dim b(1 To n) As Integer    'n道菜自取耗时

Private Sub Form Load)

    '产生外卖送货各道菜耗时,并存储到数组a中,并显示

    '产生自取各道菜耗时,并存储到数组b中,并显示

    '代码略

End Sub

Private Sub Command1_Click()

    Dim i As Integer, max As Integer, ans As Integer

    Dim left As Integer, right As Integer, m As Integer

    For i=1 To n

        If a(i) > max Then       '外卖员送菜的最长时间

    Next i

    left= 1: right = max: ans = max

    Do While left <= right

        m= (left + right) \ 2

        If Then

            ans = m: right=m-1

        Else

            left=m+1

        End If

    Loop

    Lab3. Caption=“最快”+ Str(ans) + “分钟”

End Sub

Private Function check(t As Integer) As Boolean

    Dim total As Integer

    check = False

    For i =1 To n

        If a(i) > t Then

            total ='如果外卖来不及就自己取

        End If

    Next i

  If  Then check = True

End Function

(3) 程序中加框处代码有错,请改正。
【考点】
过程与自定义函数; 查找算法及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
真题演练
换一批
1. 张三是一名计算机专业的大学生,为了帮助同学们学习专业相关的英语词汇,编写一个简易字典程序。该程序中存放词汇数据库,在学习中输入英文单词,可以获得中文翻译结果。程序中的词汇数据库采用链表方式存储,首字母相同时按升序排序。查找单词时,首先根据首字母找到同首字母最小单词所在链表,再按照链表顺序查找该单词。
(1) 根据题意 ,部分的单词库数据逻辑结构如图所示 ,查找单词“byte” 的过程是 “binary ”→ “bit ”→“byte”,补充图中空白单元格的值为

(2) wordlist(data,info)函数实现将词汇数据库 data 以链表的方式按字母序升序排列。info 表示词汇数据库中各字母开头的最小单词位置,如 info[0]表示字母 a 开头的最小单词在 词汇数据库 data 中的位置。实现该功能的程序如下,请在划线处填入合适的代码。

def wordlist(data,info) :

    n = len (data)

    for i in range(n):

        data[i].append(-1)    #data[i]追加一个元素-1

    for i in range(n):

        d = data[i][0]

       

        if info[k] == -1:

            info[k] = i

        else:

            head = info[k]

            q = head

            while  :

                p = q

                q = data[q][2]

            if q != head:

                data[p][2] = i

                data[i][2] = q

            else:

                data[i][2] = head

               

return data,info

(3) searchword(data,info,key)函数实现单词的查找。程序如下,请在划线处填入合适的代码。

def searchword(data,info,key) :

    k = ord(key [0]) - ord("a")

    head = info[k]

    p = head

    while p != -1:

        if data[p][0] == key:

            return

            p = data[p][2]

return "没有找到该单词"

读取词汇数据库,存入列表 data 中,列表的每个元素包含 2 个数据项,分别为英文单词和中 文翻译,如 data = [[‘audio ’,‘音频 ’], [‘binary ’,‘二进制数 ’] …], 数据读取 存入的代码略。

'''

info = [-1] * 26

data,info = wordlist(data,info)

key = input("请输入查找单词:").lower ()    #转化为小写字母

res = searchword(data,info,key)

print(key, "查找结果是:", res)

综合题 困难
2. 跳蚤市场:为了筹集善款,学校组织了跳蚤市场活动。有n个学生打算卖出某种物品,其中第i个人希望以不低于a(i)的价格卖出:另有m个学生打算买入这种物品,其中第i个人希望以不高于b(i)的价格买入。如果物品的价格不低于卖方的最低价格且不高于买方的最高价格 , 则交易成功,否则交易失败。

另外为了公平,学校决定统一定价,使得最终价格能够让最多对学生成功进行交易。若有多个价格满足条件,则取满足条件的最高价。请你帮助校方完善VB程序,编程计算这批物品的最终定价。

例如,有6个学生打算卖出物品,他们的预期价格如图1所示。

卖方编号

1

2

3

4

5

6

预期价格

30

32

31

33

29

35

图1

另一有6个学生打算买入物品,他们的预期价格如图2所示。

买方编号

1

2

3

4

5

6

预期价格

34

31

29

32

33

31

图2

若分别以31元或32元的价格成交,都有3对学生交易成功,故最终定价为32元。

程序运行时,从外部数据库中输入买卖双方价格并显示到列表框List1和List2中,单击命令按钮Command1进行计算,并将最终的计算结果输出到标签Label3中,程序运行界面如图3所示。

(1) 若图2中的买家1退出了交易,不再卖出物品,则最终定价为元。
(2) VB代码实现如下,请在划线处填入合适的代码。

Dim n As Integer, m As Integer

Dim a(1 To 20) As Integer, b(1 To 20) As Integer

Private Sub Form_ Load()

    '读取卖家人数n以及最低卖出价格,存入数组元素a(1)到a(n)中;

    '读取买家人数m以及最高买入价格,存入数组元素b(1)到b(m)中;

    '代码略

End Sub

Private Sub Command1_Click()

    Dim i As Integer, L As Integer, R As Integer

    Dim ml As Integer, m2 As Integer, sI As Integer, s2 As Integer

    Dim price1 As Integer, price2 As Integer

    Dim tot1 As Integer, tot2 As Integer

    Dim mini As Integer, maxi As Integer

    mini = a(1): maxi =            ' mini 和maxi分别为可交易的最低价和最高价

    For i=2 To n

        If mini > a(i) Then mini = a(i)

    Next i

    For i=2 To m

        If maxi < b(i) Then maxi = b(i)

    Next i

    L=mini:R=maxi

    Do While L<R

        s1 =0:s2= 0

        m1=(L+R+1)\2

        For i=1 To n

            If a(i)<=m1 Then s1=s1+1

        Next i

        For i=1 To m

            If b(i)>=m1 Then s2=s2+1

        Next i

        If s1>s2 Then  Else L=m1

    Loop

    price1=L: tot1 = s1       'price1和tot1分别为价格和交易人数

    L=mini:R=maxi

    Do While L<R

        s1 =0:s2=0

        m2=(L+R)\2

        For i =1 To n

            If a(i) <= m2 Then s1=s1 + 1

        Next i

        For i=1 To m

            If b(i) >= m2 Then s2=s2+1

        Next i

        If s1<s2 Then L=m2+1 Else R=m2

    Loop

    price2 = L: tot2 = s2     ' price2和tot2分别为价格和交易人数

    If  Then

        Label3.Caption ="最终定价为" + Str(price1) + "元"

    End If

End Sub

综合题 困难
3. 校服烘干。五校联考要求学生统一穿校服参加,但是不幸的是,考试前所有考生的校服全都打湿了。一件衣服在自然条件下用一秒的时间可以晒干a点湿度。现在学校里有且仅有一台烘衣机,且目前烘衣机全部断货(即无法购入新机器)使用用一秒烘衣机可以让一件衣服额外烘干b点湿度(一秒晒干a+b湿度),但在同一时间内只能烘一件衣服。现在有n件衣服,第i衣服的湿度为w(i)(保证互不相同),要你求出弄干所有衣服的最少时间(湿度为0为干)。编写VB程序,实现上述功能。运行程序,显示窗体From1,在文本框Text1输入衣服总数n,在文本框Text2中输入a,在文本框Text3中输入b,在文本框Text4中输入各件衣服的湿度(共n个数据,数据与数据使用空格隔开),点击命令按钮Command1后,在标签Label1中显示弄干所有衣服的最少时间。程序运行界面如图所示。请回答下列问题:

(1) 若要使程序运行时,命令按钮Command1上显示为“计算”,可以在事件处理过程中添加语句Command1.Caption="计算"。(单选,填字母:A .Form_Load/B .Form1_Load/C .Command1_Click/D .Form1_Start)
(2) 实现上述功能的VB程序如下,请在划线处填入合适代码。

Const maxn = 500005

Dim n As Long, a As Long, b As Long

Dim f(1 To maxn) As Long

Dim i As Long, tby As Long

Private Sub Command1_Click()

    tby = 1

    n = Val(Text1.Text) : a = Val(Text2.Text) : b = Val(Text3.Text)

    For i = 1 To n

        f(i) = Getin()

    Next i

    Dim l As Long, r As Long, m As Long

    l = 0: r = n

    Do While l <= r

        m = (l + r) / 2

        If Then

            r = m - 1

        Else

            l = m + 1

        End If

    Loop

    Label1.Caption = Str(r + 1)

End Sub

Function check(x As Long)

    Dim y As Long

    y = x

    For i = 1 To n

    Dim tmp As Long

   

    If tmp > 0 Then

        If y < 0 Then

            check = True

            Exit Function

        End If

    Next i

    check = False

End Function

Function Getin() As Long

    Dim aaa As String

    aaa = Mid(Text4.Text, tby, 1)

    If aaa = " " Then tby = tby + 1

    aaa = Mid(Text4.Text, tby, 1)

    Dim bbb As Long

    bbb = 0

    Do While aaa <> " " And tby <= Len(Text4.Text)

        bbb = bbb * 10 + Val(aaa) : tby = tby + 1

        aaa = Mid(Text4.Text, tby, 1)

    Loop

    Getin = bbb

End Function

(3) 程序中加框处代码有错,请改正。
综合题 困难