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 展开
有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 展开
1个回答
展开全部
#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;
}
}
如果还有错再找我。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询