刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

单选题

用分治法查找列表中是否存在指定的数字。给定的列表已升序排序。请补全程序代码?( ) \#在列表cards中查找数字x,返回下标值,若未找到,返回-1 def serch(cards=list,x=int): ​ a=0 #定义左端点下标 ​ b=len(cards)-1 #定义右端点下标 ​ \#逐级分割查找范围,缩小查找规模 ​ while a<=b: ​ m=(a+b)//2 #定义中点下标 ​ if x==cards[m]: #x刚好等于中点值 ​ return m ​ elif ① : #x<中点值,说明x位于左段位置 ​ b=m-1 #重新定义右端点 ​ else: ​ a=m+1 #重新定义左端点 ​ return -1 #未找到,返回-1 \#主程序 \#在列表d中查找用户输入的数字r d=[1,6,16,24,44,46,79,80,81,82,87,102,134,151,156,188,196,202,212,226,228,248,272,274,286,306,321,351,363] print(d) #显示一下列表d r=int(input("请输入要查找的数字:")) y=serch(d,r) #调用子函数,d,r是实参 if y>=0: ​ print("已找到",r,",它是列表中第",y+1,"个数字") else: ​ print("未找到",r)

A
x
B
x
C
x>cards[m-1]
D
x>cards[m]
使用微信搜索喵呜刷题,轻松应对考试!

答案:

B

解析:

【喵呜刷题小喵解析】根据题目描述,列表cards已经升序排序,所以在查找指定数字x时,我们可以使用分治法的思想,将查找范围逐级分割,缩小查找规模。在while循环中,我们首先计算中点m,然后判断x与cards[m]的关系。如果x等于cards[m],则直接返回m;如果x小于cards[m],则说明x位于左段位置,我们将右端点b更新为m-1;否则,x大于cards[m],我们将左端点a更新为m+1。这样,我们可以逐渐缩小查找范围,直到找到x或者确定x不在列表中。根据题目中给出的选项,当x小于cards[m]时,我们应该将b更新为m-1,所以选项B "x
创作类型:
原创

本文链接:用分治法查找列表中是否存在指定的数字。给定的列表已升序排序。请补全程序代码?( ) \#在列表ca

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share