1. 有n个从小到大排列的正整数依次存储在数组a中,另有m(m<n)个正整数存储在数组b中。现要求只保留上述n+m个数据中从小到大排列的前n个数据,并依次存入数组a中,其余数据被剔除。

小李为了解决该问题,首先结合数组a的有序性,找出a,b两个数组中要剔除的m个数据,再将数组b中保留的数据插入到数组a中。示例如下:

n=10,数组a:2,4,6,8,10,12,14,16,18,20

m=5,数组b:41 , 11,17 , 29,9

处理后的数组a:2,4,6,8,9 , 10,11 , 12,14,16

(1) 若n=8,m=4,数组a的元素依次为“3,4,6,10,13,14,21,25”,数组b的元素依次为“3,18,7,15”,按上述要求剔除m个数据后,数组b中保留的数据个数为个。
(2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

Const n=1000,m=50

Dim a(1 To n)As Integer, b(1 To m)As Integer

Function getImax(k As Integer)As Integer

    ‘在数组元素b(1)~b(k)中找出值最大的元素,返回其下标,代码略

End Function

Private Sub Commandl_Click( )

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

    Dim na As Integer, nb As Integer, imax As Integer, mean As Integer

     ‘读取数据分别存入数组a、b,代码略

    na=n : nb=m

    imax=getImax(nb)

    For i=1 To m

        If a(na)<= Then

            b(imax)=b(nb)

            nb=nb-1

            If nb>0 Then imax=getImax(nb)

        Else

            na=na-1

        End If

    Next i

    Do While nb>0

        i=1 : j=na

        imax= getImax(nb)

    Do While i<=j

        mean =(i+j)\2

        If a(mean)<b(imax) Then i= mean +1 Else j=mean-1

    Loop

        For k=na To 1 Step-1

            

        Next k

        a(i+nb-1)=b(imax)

        b(imax)=b(nb)

        

        nb=nb-1

    Loop

    '输出数组a,代码略

End Sub

【考点】
常见数据类型、数组; 分支结构语句及程序实现; 循环结构语句及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
真题演练
换一批
1. 某仓库有一排连续相邻的货位,编号依次为0~n-1,用于放置A、B两种类型的箱子,A型箱子占2个相邻货位,B型箱子占1个货位。编写程序,根据已完成的放置或搬离操作,输出空货位数及还可以放置A型箱子的最多数量(不移动已放置的箱子)。请回答下列问题:

(1) 若n为10,开始时货位全空,经过如图所示的放置或搬离操作后,不移动已放置箱子的情况下,还可放置A型箱子的最多数量为个。
(2) 实现上述功能的部分Python程序如下,请在划线处填入合适的代码。

# 读取货位总数,存入n,代码略。

cnt1 = n

lst = [0]*n         # 货位状态,0表示对应的货位为空

while True:

    #读取本次已操作的数据:箱子类型、操作类型、货位编号起始值,存入t、d和s,代码略

    if t = = 'A':

        w = 2

        :

        w=1

    else:           # t不是'A'或'B'时退出循环

        break

    if d = = 'P':        # d为P时表示放置,否则表示搬离

       

    else:

        cnt1 + = w

    lst[s]=1-lst[s]

    if t = = 'A':

        lst[s+1] = 1-lst[s+1]

    i, cnt2 = 0,0

    while i < n-1:

        if lst[i] = = 0 and lst[i+1] = = 0:

           

            cnt2 + = 1

        i + = 1

    print("当前空货位数: ',cnt1,',还可放置A型箱子的最多数量: ',cnt2)

综合题 困难
2. 某工程包含n个任务(编号为0-n-1),每天可以有多个任务同时进行。某些任务之间有依赖关系,如图a所示,任务4依赖于任务1,任务1依赖于任务2。即任务2完成后才可以开始任务1,任务1完成后才可以开始任务4。不存在一个任务依赖于多个任务,或多个任务依赖于同一个任务的情况。

现已对该工程的依赖关系进行了梳理,结果如图b所示,标记“T”表示依赖关系需保留,标记“F”表示依赖关系需删除。

根据每个任务完成所需的天数和梳理后的依赖关系,编写程序,首先删除标记为“F”的依赖关系,然后计算工程最快完成所需的天数,并以工程最快完成所需的天数为期限,计算每个任务最晚必须开始的时间。

图a

图b

请回答下列问题:

(1) 若某工程有6个任务,任务间依赖关系如图a所示,完成任务0~5所需天数分别为2,1,3,5,1,6,则工程最快完成需要天。
(2) 定义如下erase(lst)函数,参数lst列表的每个元素表示一个依赖关系。函数的功能是删除标记为“F”的依赖关系,返回保留的依赖关系的个数。

def erase(lst):

    i=0

    j = len(lst)-1

    while i<= j:

        if lst[i][2]== 'T':

           i+=1

        else:

           if lst[j][2] == 'T':

              lst[i]=lst[j]

              i + = 1

           j - = 1

return i

若lst列表依次存储图b所示的依赖关系,如lst[0]为[0,5,'T'],调用erase(Ist)的数,则语句“lst[i] =lst[j]”的执行次数为

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

def proc(n, lst,task):

pr=[0]*n

    w=[0]* n          # w[i]存放任务1最晚必须开始的时间

    m=erase(lst)

    for i in:

        task[lst[i][1]][1] =lst[i][0]

        pr[lst[i][0]] =1

    c=[]

    days= 0           # days存放工程最快完成所需的天数

    for i in range(n):

        if pr[i]==0:

            k = i

            s = 0

            while k!= -1:

                c.append(k)

                s += task[k][0]

               

            if s > days:

                days=s

    for i in range(n-1,-1,-1):

        k =c[i]

        if task[k][1] == -1:

            w[k] = days-task[k][0]+1

        else:

              

    # 输出days,以及保存在w中的每个任务最晚必须开始的时间,代码略

'''

工程包含的任务数存入变量n

任务间的依赖关系存入lst列表

lst[0]包含3项,任务1st[i][0]依赖于任务lst[i][1],lst[i][2]存放保留/删除标记,任务数据存入task列表task[i]包含2项,task[i][0]为完成任务主所需天数,task[i][1]的初值为-1

代码略

'''

proc(n,lst,task)

综合题 困难
3. 小华开发了一个自动改卷系统,但是由于科目不同,没有固定的题号模板,于是小华又编写了python程序,能根据试卷答案自动输出题号。如图1为答案模板文件,小华在模板文件中录入答案后保存为"卷3.txt",如图2所示,每一行是一题或者一题中的一小题的答案,题号之间没有跳跃。例如:图2中【1】和【5】之间有4行,A、B、C、D为第1到4题的答案。程序运行结果如图3所示。

图 1

图 2

图 3

(1) 实现上述功能的 Python 程序如下,若删除图2最后一行(【7】所在的行),对程序运行结果  影响(填:有/没有)。
(2) 请在划线处填入合适的代码。

f=open("卷 3.txt",encoding="utf-8")

line=f.readline().strip() c=0      #strip()用于删除字符串尾部的"\n"换行符

preId=0

QuestionInfo=[ ]

while line:

    if line[0] == "【":

        curId =

        if curId - preId > 1:

            for i in range(preId, curId):

                QuestionInfo.append(str(i))

        elif c>0:

            for i in range(1, c + 1):

                QuestionInfo.append(str(preId) + "(" + str(i) + ")")

        c = 0

           

    else:

       

    line=f.readline().strip()         #strip()用于删除字符串尾部的"\n"换行符

f.close()

print("卷 3 题号划分为: ")

for Id in QuestionInfo:

    print(Id)

综合题 困难