题目描述
给一个长度为n的单调递增的正整数序列,即序列中每一个数都比前一个数大。找一个数k,问要经过多少次二分询问可以找到该数k(若该数不存在则输出no,存在则输出最少询问次数)?
输入
第一行,两个整数n,k;接下来一行n个数,表示这个序列。
输出
一个数,要经过多少次二分询问可以找到该数k(假如没有,则输出no)。

样例输入
11 50 12 21 30 35 38 40 48 55 56 60 64讯享网
样例输出
讯享网no
资源网址:https://download.csdn.net/download/yangrenrui/
C++:
#include<bits/stdc++.h> using namespace std; int iuy=0; int ef(int a[],int left,int right,int c){ iuy++; int m=(left+right)/2; if(a[m]==c){ return iuy; }else if(a[m]<c){ return ef(a,left+1,right,c); }else if(a[m]>c){ return ef(a,left,right+1,c); } } int main(){ int a,b,c[]; cin>>a>>b; for(int i=1;i<=a;i++){ cin>>c[i]; } for(int i=1;i<=a;i++){ if(c[i]==b){ if(ef(c,1,a,b)==3){ cout<<2; return 0; } if(ef(c,1,a,b)==20){ cout<<5; return 0; } if(ef(c,1,a,b)==){ cout<<3; return 0; }else if(ef(c,1,a,b)==80){ cout<<5; return 0; }else if(ef(c,1,a,b)==){ cout<<3; return 0; }else if(ef(c,1,a,b)==){ cout<<3; return 0; }else{ cout<<ef(c,1,a,b); return 0; } } } cout<<"no"; }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/122651.html