二分查找选择题专题二
班级 姓名
1.【202304杭二模】有如下Python程序段:
import random
a=[2,3,5,8,10,10,10,17,19,20]
key=random.randint(1,30) #随机生成[1,30]之间的整数
i,j=0,9
while i<=j:
m=(i+j)//2
if a[m]>key:
j=m-1
else:
i=m+1
print(j)
执行该程序段,下列说法正确的是( )
A.若key的值为10,则输出的值为3
B.若输出的值为8,则key的值一定为19
C.对于任意key值,语句“m=(i+j)//2”最少执行1次
D.对于任意key值,语句“m=(i+j)//2”最多执行3次
2.【202304天域联盟】某二分查找算法的Python程序如下:
import random
key=random.randint(0,4)*2+5
n=10 ; ans=0
a=[4,5,5,8,9,11,11,13,15,17]
i=0 ; j=n-1
while i<=j:
m=(i+j)//2
if a[m]<=key:
i=m+1
else:
j=m-1
ans+=a[m]
print(ans)
程序运行后,输出ans的值不可能是( )
A.19 B.27 C.37 D.44
3.【202304暨阳联谊】某对分查找的Python程序如下:
from random import randint
a=[19,17,16,14,13,11,9,7]
key=randint(0,4)*2+9
i=0 ; j=7 ; c=0
while i<=j:
c=c+1 ; m=(i+j)//2
if a[m]>key:
i=m+1
else:
j=m-1
该程序段执行后,下列说法不正确的是( )
A.j的值可能为1 B.c的值一定等于3
C.i的值一定等于j+1 D.i的值一定不等于7
4.【202304金华十校】有如下Python程序:
a=[0,20,23,23,24,24,31,48,49,73,75]
key=int(input())
c=0
i,j=1,10
while i<=j:
m=(i+j)//2
if a[m]<=key:
i=m+1
else:
j=m-1
c+=1
print(c)
若程序运行后,输出的结果是3,则输入的key可能是( )
A.20 或 73 B.24 或 49 C.23 或 24 D.23 或 49
5.【202304台州二模】列表a和列表b均有5个从小到大排列的整数元素,且列表a的最后一个元素大于列表b的最后一个元素。有如下Python程序段:
i=0 ; j=len(a)-1 ; c=0
for key in b:
while i<=j:
m=(i+j)//2 ; c+=1
if key
j=m-1
else:
i=m+1
a=a[:i]+[key]+a[i:]
i+=1 ; j=len(a)-1
执行该程序段后,c的值至少是( )
A.5 B.6 C.10 D.20
6.【202304绍兴二模】有如下Python程序:
import random
target=random.randint(20,70) #随机生成[20,70]区间内的一个正整数
nums=[11,23,35,44,57,68,76,89]
left=0 ; right=len(nums)-1
lst=[]
while left<=right:
lst.append([left,right]) #为lst追加一个元素
mid=(left+right)//2
if nums[mid]==target:
break
elif nums[mid]left=mid+1
elif nums[mid]>target:
right=mid-1
该程序执行完后,列表lst的长度不可能为( )
A.1 B.2 C.3 D.4
7.【202304嘉兴二模】有如Python程序段:
import random
def find(x, y):
m=(x+y+1)//2
if a[m]==key:
return m
if a[m]>key:
y=m-1
else:
x=m+1
return find(x, y)
a=[2,4,6,8,10,12,14,16]
key=random.choice(a) #从序列的元素中随机挑选一个元素
i=0 ; j=len(a)-1
xb=find(i,j)
print(xb,key)
上述程序执行完后,函数find被调用的最多次数是( )
A.3 B.4 C.5 D.6
8.【202303杭州周边重点中学】某二分查找算法的程序段如下:
key=int(input('待查数据为:'))
i=0 ; j=10 ; n=0
while i<=j:
m=(i+j+1)//2
if a[m]==key:
break
elif a[m]>key:
j=m-1 ; n=n-1
else:
i=m+1 ; n=n+1
执行该程序段后,下列说法正确的是( )
A.该程序若要实现对分查找,要求数组a按降序排列
B.若n为-2,则查找key值可能等于a[3]的值
C.若n为2,则查找key的值可能小于a[10]
D.n的值最小为-4,最大为4
9.【202303七彩阳光金丽衢】有如下Python程序段:
import random
a=[90,15,40,72,59,32,81,6] ; b=[7,1,5,2,4,3,6,0]
i,j=0,len(a)-1
key=random.randint(30,60)
while i<=j:
m=(i+j)//2
if a[b[m]]==key:
p=b[m]
break
elif a[b[m]]i=m+1
else:
j=m-1
程序运行后,变量p的值不可能是( )
A.2 B.3 C.4 D.5二分查找选择题专题二
班级 姓名
1——5:BAABB
6——10:DBCD