資源簡介 數據查找一 、選擇題(每小題列出的四個備選項中只有一個是符合題目要求的,不選、多選、錯選均不得分)1.給定任意的查找鍵,在序列3,5,8,12,15,23中進行數據查找,下列說法不正確的是 ( )A.若用順序查找實現,則最少查找1次B.若用二分查找實現,則最少查找1次C.若用順序查找實現,則最多查找6次D.若用二分查找實現,則最多查找4次2. 使用二分查找在有序序列21,45,56,65,68,72,79,83,88,96中查 找75,依次需要進行比較的數據是 ( )A.68,83,72B.21,45,56,65,68,72,79C.68,83,72,79D.68,45,56,653. 某查找算法的Python 程序如下:key=int(input())s=0a=[2,5,18,14,5,56,9,5,37,35,5]for i in range(len(a)):if a[i]=key:s+=1print(s)程序運行后,輸入key的值為5,輸出的結果是 ( )A.1 B.2C.3 D.44.某Python程序如下:a=[3,5,8,11,13,15,16,20,25,30]i.j,x=0,9,20while i<=j:m=(i+j)//2if x==a[m]:breakif xj=m- 1else:i=m+1(())程序運行后,下列表達式的值為True的是A.i==m+1B.j=m- 1C.j>m+1D.i==m- 15.某二分查找算法的Python程序如下:a=[125,117,115,108,102,95,88,63,51,36]key=108i,j=0,len(a)- 1ss=""while i<=j:m=int(i+j)/2+0.5)ss=ss+str(m)if key==a[m]:breakif keyi=m+1ss=ss+">>"!else:j=m- 1ss=ss+"<<"print(ss)程序運行后,輸出的結果是A.4<<1>>2>>3B.5<<2<<4>>3C.5<<2>>4<<3D.5<<2>>4>>36. 某Python程序如下:s=""a=[4,7,10,13,16,19,22,25]for k in range(4):key=5+k*2i.j=0,7while i<=j:m=(i+j)//2if a[m]==key:s=s+"M"breakif a[m]i=m+1s=s+"R"else:j=m- 1s=s+"L"print(s)程序運行后,字符串s中出現次數最多的字母是 ( )A.L B.R C.M D.L 和R 一樣多7.某二分查找算法的Python程序如下:a=[6,9,11,16,19,20,24,27,29]key=int(input("請輸入key的值:")i,j=0,len(a)- 1s=1"while i<=j:m=int((i+j)/2)s=s+str(m)if key= =a[m]:breakelif keyj=m- 1s=s+","else:i=m+1s=s+","print(s)程序運行后,輸入key的值,輸出的結果為“4,6,7,8,”,則key 的值可能是 ( )A.26 B.27 C.28 D.298. 用二分查找的方法求不等式2^x+4*x-7<=n(n>=0) 的最大正整數解,編寫Python程序如下:n=int(input())L,R=1,n+1while Lx=(L+R+1)/2if 2**x+4*x-7<=n:①else:②print("方程2^x+4*x-7<=n 的最大正整數解為:",R)(())劃線處應填入的代碼是A.①L=x+1 ②R=x- 1B.①R=x- 1 ②L=x+1C.①L=x②R=x- 1D.①L=x ②R=x9. 某二分查找算法的Python 程序如下:def search(a,key):i,j=0,len(a)- 1s=""while i<=j:m=(i+j+1)/2s+=str(m)if key==a[m]:breakif key>a[m]:i=m+1else:j=m- 1print(s)a=[3,10,25,34,40,52,61,72,83,90]key=int(input("請輸入查找值:"))search(a,key)程序運行后,下列說法正確的是A.每次訪問區間中中間偏左的數據B.輸入任意正整數進行查找,則最多的查找次數為5C.輸入key的值為10,輸出的結果為52D. 若在某次查找中,當i=j 時,條件“key==a[m]”仍不成立,則表示查找的數據不存在二、非選擇題10. 數 組a 中存放著一組正整數,其中奇數在前,偶數在后,奇數與偶 數已分別升序排序,形如[1,7,13,15,21,2,4,8,22,26,30,36,40]。依據二分查找思想,小馬設計了一個從數組a中查找數據key的算法,其 Python程序如下,請在劃線處填入合適的代碼。i=0;j=9a=[1,7,13,15,21,2,4,8,22,26,30,36,40]key=int(input("請輸入待查找數據:"))while i<=j:m=(i+j)/2if a[m]= =key:breakif key%2==0 and a[m]%2==1:①elif key%2==1 and a[m]%2==0:②else:if ③j-m- 1else:i-m+1if i>j:print("未找到")else:print("數組元素a["+str(m)+"]即為所查找的數據!")11. 小王家里裝修,需要長度相同的k 根木板,因為考慮不周,在購買 原材料時沒有提出明確要求,所以供應商提供的木板長度是隨機 的。因此他只能將已有的木板切割成k根木板(木板切割前后的 長度均為整數),為了計算最大能夠切割出的木板長度,他編寫了一 個Python程序,程序運行示例如圖所示。請輸入待分割的木板長度,用空格隔開:759126 請輸入需要的木板根數:4 最大切割長度為:6請回答下列問題:(1)若給出的木板長度為10,8,3,5,9,18,需要的木板根數為4,則 切割的最大長度為(2)實現上述功能的Python程序如下,請在劃線處填入合適的 代碼。def check(x,k,a):sum=0for i in range(len(a)):if sum>=kreturn Truesum= ①if sum>=k:return Trueelse:return Falses=input("請輸入待分割的木板長度,用空格隔開:").split("")a=[0]*len(s)for i in range(len(s)):a[i]-int(s[i])n=len(s)k=int(input("請輸入需要的木板根數:")R=0for i in range(n):② :R=a[i]L=0ans=0while L<=R:m=(L+R)//2if check(m,k,a):L=m+1ans=melse:③print("最大切割長度為:",ans) 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫