C++折半查找

ProblemDescription有15个数按由小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中的下标,如果该数不在数组中,则输出“No”。I... Problem Description
有15个数按由小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中的下标,如果该数不在数组中,则输出“No”。
Input
第一行有一个自然数T,接下来2T行数据,其中第一行是15个数M(-10000<=M<10000),第二行是待查找的数N。
Output
对于每两行要判断的数,输出一行,如果找到,就输出该数是数组中的序号,如果没找到,就输出“No”。
Sample Input
2
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
13
-100 -30 2 4 6 9 12 19 58 200 230 3000 8000 10000 99999
3000
Sample Output
9
No
展开
 我来答
微星time
2014-12-03 · TA获得超过161个赞
知道答主
回答量:106
采纳率:0%
帮助的人:66.8万
展开全部
#include<iostream> 

using namespace std;

int BinSearch(int con[15],int m);//折半查找 

int main(){

 

 int n,con[15];

 cin>>n;

 while(n--){//控制次数

  int m,con[15],k;

  for(int i=0;i<15;i++)

   cin>>con[i];

  cin>>m;

  k=BinSearch(con,m);

  if(k==0) cout<<"No"<<endl;//没有输出No 

  else cout<<k+1<<endl;  //输入序列号 

 }

}

int BinSearch(int con[15],int m){

 int low=0,high=14,mid;

 while(low<=high){

  mid=(low+high)/2;

  if(m==con[mid]) return mid;

  else if(m<con[mid]) high=mid-1;

  else low=mid+1;

 }

 return 0;

}

希望对你有帮助

更多追问追答
追问

追答

在主函数中添加个return 0;

con可能是因为重复定义了。删除一个。

在粘贴的过程中可能出错了

#include<iostream>
using namespace std;
int BinSearch(int con[15],int m);//折半查找 
int main(){
int n;
cin>>n;
 
 while(n--){//控制次数
 
  int m,con[15],k;
 
  for(int i=0;i<15;i++)
 
   cin>>con[i];
 
  cin>>m;
 
  k=BinSearch(con,m);
 
  if(k==0) cout<<"No"<<endl;//没有输出No 
 
  else cout<<k+1<<endl;  //输入序列号 
 
 }
return 0; 
 
}
 
int BinSearch(int con[15],int m){
 
 int low=0,high=14,mid;
 
 while(low<=high){
 
  mid=(low+high)/2;
 
  if(m==con[mid]) return mid;
 
  else if(m<con[mid]) high=mid-1;
 
  else low=mid+1;
 
 }

如果还有错再找我。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式