试题详情
选择题 较难0.4 引用1 组卷37
某对分查找算法的 VB 程序段如下:
n   = 0: i = 1: j = 6
Key = Val(Text1.Text)
Do While i <= j
       m=(i+j)\2
       n=n+1
       If Key = d(m) Then Exit Do
       If Key < d(m) Then j = m - 1
       Else i= m + 1
Loop
If i <= j Then s = m – n
Else   s = n
数组 d(1)到 d(6)的值依次为“4,6,9,13,20,25”,输入某个 Key 值后,运行该程序段后,变量 s 结果为 3,则 输入 key 的值不可能是(     
A.25B.20C.5D.3
2020·浙江·一模
知识点:查找算法及程序实现 答案解析 【答案】很抱歉,登录后才可免费查看答案和解析!
类题推荐
某办事处每天都有客户来办理业务,每位客户信息包括客户编号、到达时间、办理业务所需时 长和客户等级(1 代表是 VIP ,0 代表不是 VIP) ,如图 a 所示。已将当天所有客户信息, 按照到达时间的先后顺序存储在文件中。该办事处共有 2 个窗 口,初始时仅开通 1 个窗 口,当 排队人数到达 m 时,增开 1 个窗 口,增开窗 口后,不再关闭。所有客户按照到达时间排成一队办理业务,VIP 客户优先。
客户
编号
到达
时间
办理业务所 需时长 (分)客户
等级
107:5380
207:5460
307:5770
408:0281
508:12101
....

图 a

图b

从文件中读取当天客户信息,根据上述规则,按办理业务顺序输出办理结果,如图 b 所示。
       (1) 以图 a 为例,若只开 1 个窗口,第 4 个办理业务的客户编号为______________
       (2) 实现上述功能的 Python 程序段如下,请在划线处填入合适的代码。
'''从文件中读取客户信息存入 data 中 (到达时间已转换为分钟,如 07:53 转换为 473) ,其 中 data[0]存储第 1 个客户信息,data[0][0] 、data[0][1] 、data[0][2] 、data[0][3]为分别表示第 1 个客户的客户编号、到达时间、办理业务所需时长 (分) 和客户等级,代码略。'''                 
def mt(x) :
#将分钟转换为时间格式,如 473 转换为 07:53,代码略
def gs(x):
#格式化输出,代码略
t=[[9999,9999],[9999,9999]]#t[0]代表第一个窗口的开始时间和结束时间,t[1]代表第二个窗
口的开始时间和结束时间
m=int(input("请输入 m 的值:"))
n=len(data)
t[0][0]=data[0][1]
t[0][1]=data[0][1]+data[0][2]
print("办理序号","客户编号","开始时间","结束时间","窗口编号")
print(gs(1),gs(data[0][0]),gs(mt(t[0][0])),gs(mt(t[0][1])),gs(0))
full=False                  #full 为 True 表示 2 个窗口办理业务
waitnum=0
openwin=False       #openwin 为 True 表示增开 1 个窗口
i=1;q=1;head=1;tail=1          #第一个人已经在办理业务, 队伍为空
while         _______ :
     while i < n and data [i][1] < min(t[0][1],t[1][1]):
          tail+=1
          waitnum+=1
          tmp=data[tail-1]
          j=tail-2
          while           _______ :               #根据优先级调整排队次序
               data [j+1]=data [j]
               j-= 1
          data[j+1]=tmp
          i+=1
          if waitnum==m and not full:
               full=True
               openwin=True
               break
     x=0 #办理业务的窗口编号
     if openwin or full and t[1][1] < t[0][1]:
          x= 1
          if openwin==True:            #新开一个窗口
               t[x][1]=        ________
               openwin=False
     if waitnum>0:
          t[x][0]=t[x][1]
          t[x][1]=t[x][1]+data[head][2]
          waitnum-= 1
          q+=1
          print(gs(q),gs(data[head][0]),gs(mt(t[x][0])),gs(mt(t[x][1])),gs(x))
_______
     else:
          t[x][0]=data[i][1]
          t[x][1]=data[i][1]+data[i][2]
          q+=1
          print(gs(q),gs(data[i][0]),gs(mt(t[x][0])),gs(mt(t[x][1])),gs(x))
          i+=1
          head=tail=i
小高想实现数字各数位的重新排序,编写了一个VB程序,功能如下:在文本框Text1中输入一个数字,点击按钮后,数字各数位将重新排序。其排序规律为:字符s用来存放排序之后的数据,先找出所有数中最大的数(若有重复数,放在一起),当左边的数字个数小于等于右边时,则放左边;否则,放在右边;再找出剩余数中最大的,用相同规律排列,以此类推,直至所有数位上的数重排完毕。其中s初始的左右两边数据个数均为0。程序运行界面如下图所示。

(1)单击“重排”按钮开始重排数据,从代码中可知,该按钮的名称为__________
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码,并且加框处代码有错,请改正。
Private Sub Cmdl_Click()

Dim a As String, lena As Integer,d(1 To 20) As String, key As String

Dim temp As String.L As Integer,R As Integer,s As String

a=Textl. Text: lena=Len(a)

For i=1 To lena

d(i)=Mid(a,I,1)

Next i

For i=1 To lena

key=d(i)

For j=1 To i-1

If   d(j)< key Then Exit For

Next j

If   key <>d(j) Then

For   k = I To j+1   Step-1

______________' ①填空

Next   k

End   If

d(j)=key

Next   i

For i=1 To lena

temp=temp+d(i)

Next   i

i=1:L=0:R=0:s=""

Do While i<=lena

For j=i+1 To lena

If   d(i)<>d(j)   Then Exit For

Next   j

If   L<=R Then

     s=______________:L=L+j-i       ' ②填空

Else

s=s+Mid(temp,I,j-i):R=R+j-i

End   If

_____ ' ③改错

Loop

Label 3.Caption=s

End Sub
在某区间内有若干个障碍物,现需找出一个最大的空正方形用于建设方形场地。如图所示,将该区间用网格表示(区间范围m*n,m、n的值均在1-1000之间),障碍物(黑色圆点)位于若干个网点上,障碍物个数及位置随机生成。
对w*h(10*8)网格数据进行存储,无障碍物的位置对应数组元素数值为0,有障碍物的位置对应数组元素数值为1。数组d中数据初始化后,对应数组元素数值d(2)=1:d(27)=1 :d(33)=1:d(45)=1:d(52)=1:d(57)=1,其他数组元素数值为0。对应最太空正方形的起始位置为3,边长为4。
找最太空正方形的方法如下:①从当前位置右下角开始逐渐扩大正方形边长,直到有障碍物出现,不能再扩展为止;②取下一个位置,按照步骤①继续查找,最后1列为边界,该位置上无需查找。

(1)给定7*8网格,有障碍物的位置为d(8)=1:d(18)=1:d(27)=1:d(36)=1:d(52)=1,则对应最太空正方形的起始位置和边长分别为__________。(注:两个数字之间请用逗号“”,隔开)
(2)小李根据上述描述,设计了一个查找最大的空正方形起始位置和边长的算法。算法的VB程序如下请在划线处填入合适的代码。
Const W=10
Const h=8
Dim d(1 To w*h)As Integer
Private Sub Form Load ()
’数组初始化,无障碍物的位置对应数组元素值为0,有障碍物的位置对应数组元素数值为1
End Sub
Private Sub Command l_Click()
Dim i As Integer,length As Integer,maxw As Integer
Dim max As Integer
max=0
For i=1 To w*h

If i Mod w <> 0 Then ’判断该位置是否需要查找

If length>max Then max =length:maxw=i__________

End If
’输出最太空正方形的起始位置和边长,代码略。
End Sub
Function scan(k As Integer)As Integer
Dim j As Integer
Dim t As Integer,s As Integer
Dim dw As Integer
t=1
Do While k\w+1+t<h And__________

s=0

dw=k+w+1

For j=1 To t^2

s=s+d(dw+w*((j-1)\t)+(j-1)Mod t)

Next j

If ________ Then。

Exit Do ’退出循环

Else

t=t+1

End If

Loop
scan=t
End Function

组卷网是一个信息分享及获取的平台,不能确保所有知识产权权属清晰,如您发现相关试题侵犯您的合法权益,请联系组卷网