1. 某工厂收到了n个产品的订单,这n个产品分别在A、B两个车间加工,并且必须先在A车间加工后才可以送到B车间加工。为了使得总加工时间最短,我们可以将这n个产品分为两类,第一类在A车间加工时长少于在B车间加工时长,第二类在A车间加工时长不少于在B车间加工时长。第一类应将在A车间花费时间少的产品排在前面,第二类应将在B车间花费时间少的产品排在后面,然后先处理所有第一类产品,再处理第二类产品。可以证明,这样排序后所有产品加工完成花费的总时间最少。例如有4种产品,它们在A车间加工时长分别为3、5、8、4,在B车间加工时长分别为6、1、2、7,产品分类、排序、合并、计算时长的过程如图所示,最后得出总时长为21。(每个产品在B车间开始加工需同时满足它在A车间加工完并且B车间已加工完上一个产品这两个条件)

编写程序模拟工厂对这n个产品的处理过程,计算总加工时间。请回答下列问题:

(1) 由题意可知, 若 3 种产品在 A 车间加工时长分别为 5、7、3,B 车间加工时长分别为6、1、2,则总加工时长为
(2) 小华先编写了如下将第一类产品排序的函数:

def sort1(a,b):     #参数 a、b 的元素分别表示每个产品在A、B车间的加工时长。

n=len(a)

for i in range(n-1):

for j in   :

if a[j]>a[j+1]:

a[j],a[j+1]=a[j+1],a[j]

b[j],b[j+1]=b[j+1],b[j]

加框处可以填写的代码有______ (多选)

A. range(n-1-i) B. range(n-1,i,-1) C. range(i,n-1) D. range(n-2,i-1,-1)
(3) 小强编写了如下将第二类产品排序的函数:

def sort2(a,b):     #参数 a、b 的元素分别表示每个产品在 A、B 车间的加工时长。

n=len(a)

for i in range(1,n):

k1,k2=a[i],b[i]

j=i-1

while    ①     :

a[j+1],b[j+1]=a[j],b[j]

j-=1

a[j+1],b[j+1]=k1,k2

①此程序时间复杂度为   ②    。(单选, 填字母)

A. O(1)        B.O(n)      C.O(n2 )     D.O(nlog2 n)

②请在划线处填入合适的代码。

  ②

(4) 小张结合前两位同学的程序, 计算产品加工总时长。请在划线处填入合适的代码。

读取n个产品在A、B两车间加工的时间,根据题目要求分为两类,第一类产品在A、B两车间加工的时间分别存储在列表a1和列表b1中,并通过sort1()函数排序,第二类产品在A、B两车间加工的时间分别存储在列表a2和列表b2中,并通过sort2()函数排序, 代码略

a=a1+a2

b=b1+b2

n=len(a)

k,t=0,0         #k 为 A 加工时间,t 为 B 加工时间

for i in range(n):

    k+=a[i]

    if  :

        t=k

print("总加工时长最短为:",t)

【考点】
排序算法及程序实现; 分支结构语句及程序实现; 循环结构语句及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
换一批
1. 某商场有升降货梯需要在各个楼层(商场总楼层m=7)之间实现货物运送,已知需要运送的货物量为n件,分别需要从各个起点楼层送去目标楼层,例如“1-7”表示货物需要从楼层1送到楼层7,上下楼层间运作和停顿时间为3分钟,其他时间(包括空闲时上升或下降)不计。设计一个VB程序模拟运送过程,并计算输出上升过程和下降过程分别需要的时间。若起始位置楼层大于目标位置楼层,表示货物需要往下运送,为了提高运送的效率,先将货梯从下往上运送,再实现从上往下运送。

设计一个VB程序,模拟生成10件货物的上升或者下降需求,在数组en和ex中分别记录每件货物起始楼层和目标楼层,将初始需求输出到列表框List1中,然后点击按钮Command1完成货物起始楼层先升后降的排序,当起始楼层相同时,上升中则目标楼层升序,下降中则目标楼层降序。将排序结果输出到列表框List2,最后计算出上升和下降分别需要的总时长输出到文本框Text1。程序界面如下:

(1) 程序界面中有(填数字)类控件没有Caption属性。
(2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

Const n = 10:Const m = 7

Dim en(1 To n) As Integer, ex(1 To n) As Integer

Dimf(1 To n) As Integer      '值为1表示货物往上运送,值为-1表示货物往下运送

'n件货物起始楼层、目标楼层以及升降值分别存入数组en,ex,f,输出到List1,代码略

Private Sub Command1_Click()

    Dim i As Integer, j As Integer, up1 As Integer, up2 As Integer

    Dim t(1 To 2) As Integer, first As Integer, last As Integer, p As Integer

    For i = 1 To n -1

        For j = n To i + 1 Step -1

            up1 = f(j)*(en(j)*10+ex(j)): up2 = f(j-1)*(en(j-1)*10+ex(j-1))

            If f(j) > f(j -1) Or f(j) = f(j -1) AndThen

                p = f(j): f(j) = f(j -1): f(j -1) = p

                p = en(j): en(j) = en(j -1): en(j -1) = p

                p = ex(j): ex(j) = ex(j -1): ex(j -1) = p

            End If

        Next j

    Next i

    i = 1: first = en(1): last = ex(1): p = 1

    Do While i < n       '计算货梯上升时间和下降时间

        i = i + 1

        If  Then     '改错

            t(p) = t(p) + (last -first) * 3

            last = ex(i): first = en(i)

           

        ElseIf f(i) * (en(i) -last) > 0 Then

            t(p) = t(p) + f(i) * (last -first) * 3

            last = ex(i): first = en(i)

        ElseIf f(i) * (en(i) -last) <= 0 And f(i) * (ex(i) -last) > 0 Then

           

        End If

    Loop

    t(p) = t(p) + f(i) * (last -first) * 3

    Text1.Text = "升降货梯分别需要" & t(1) & "和" & t(2)& "分钟完成。"

    '将排序后的升降信息输出到List2,代码略

End Sub

(3) 程序中加框处代码有错,请改正。
综合题 困难
2. 某超市管理人员需要对一周以来商品交易的部分流水账单进行分析,以找出销售额排在前3名(同金额同名次)的商品信息。

编写VB程序,实现上述功能。运行程序,在列表框List1中显示每笔交易流水记录的商品货号与销售金额,单击“分析”按钮Command1,汇总同类商品的销售额并在列表框List2中显示销售额前3名的商品货号与销售金额。程序运行界面如图所示。

(1) 在列表框中显示结果时,使用到的“AddItem” 是

(单选,填字母: A .类名/B .属性名/C .方法名/D .事件名)

(2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

'n是交易流水的记录总数,ng是商品种类,代码略

Dim goods(1 To n) As String      '每笔交易的商品货号

Dim money(1 To n) As Single      '每笔交易的销售金额

Dim g(1 To ng) As String

Dim c(1 To ng) As Single

Private Sub Form_ Load ()

    '读取每笔交易流水,分别将商品货号存入数组goods、销售金额存入数组money

    'g(1)~g (ng)分别存储ng种商品的货号,在List1中显示交易记录信息,代码略

End Sub

Private Sub Command1_Click ()

    Dim i As Integer, j As Integer, tc As Single, tg As String

    For i=1 To n

        For j=1 To ng

             If goods(i) = g(j) Then

        Next j

    Next i

    i =1

    Do While i <= ng

        Fo rj=ng To i+1 Step-1

            If c(j)>c(j-1) Then

                tc=c(j) : c(j)=c(j-1) : c(j-1)=tc

                tg=g(j) : g(j)=g(j-1) : g(j-1)=tg

             End If

        Next j

        If  Then Exit Do

        i =i+1

    Loop

    For j=1 To

        List2.AddItem g(j) +“”+ Str(c(j))

    Next i

End Sub

(3) 程序中加框处代码有误,请改正。
综合题 困难
3. 无重叠区间。在若干个区间中,删除重复区间,使得剩余区间互不重叠(区间[1,2]和[2,3]虽有边界值2相等,但不认为是重叠区间)。小李设计VB程序,在文本框Text1中输入用逗号分隔的整数,相邻两个整数表示一个区间(任意区间的左边数据小于右边数据)。如图中所示为区间[1,2],[2,3],[3,4],[2,4]。点击“判断”按钮Command1后,删除重复区间[2,4],在文本框Text2输出满足无重复区间时需要删除的最小区间数量。运行界面如图所示。

(1) 若输入的区间集合为[2,4],[1,3],[3,4],[5,6],则需要删除区间的最小数量为
(2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

Private Sub Command1_Click( )

    Dim a(1 To 100) As Integer

    Dim i As Integer, j As Integer

    Dim temp As Integer, k As Integer

    Dim res As Integer, ed As Integer

    '从文本框Text1中读入整数存储到数组a中,整数的个数存放在变量k中,代码略

    For i=1 Tok\ 2-1   '以区间左边数据为主要关键字升序排序

        For j=k\2 To i+1 Step-1

            If  Then

                temp=a(j*2-1):a(j*2-1)=a((j-1)*2-1):a((j-1)*2-1)=temp.

                temp=a(j*2):a(j*2)=a((j-1)*2):a((j-1)*2)=temp

            End If

        Next j

    Next i

    ed=a(2)

    res= 0

    For i=2 To k\2     '计算需要删除区间的最小数量

        If  Then

            res=res+1

            ed= min(ed, )

        Else

            ed=a(i * 2)

        End If

    Next i

    Text2. Text= Str(res)

End Sub

Function min(x As Integer, y As Integer) As Inte-ger    '函数功能:返回x与y的最小值

'代码略

End Function

综合题 困难