求各位C++高手帮我看看下面这个代码,问题出在哪里。

题目:有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此表”下面是我的代码:#in... 题目:有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此表”
下面是我的代码:
#include<iostream>
using namespace std;
int main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int p,mid,start,end;
while(cin>>p){
start=0;end=14;
if(p>a[0]||p<a[14])cout<<"无此表"<<endl;
else if(p==a[0])cout<<"该数是数组中第1个元素的值"<<endl;
else if(p==a[14])cout<<"该数是数组中第15个元素的值"<<endl;
else {bool find=false;
do{
mid=(start+end)/2;
if(p==a[mid]){cout<<"该数是数组中第"<<mid+1<<"个元素的值"<<endl;find=true;break;}
else if(p>a[mid])start=mid+1;
else end=mid-1;}while(mid>=1&&mid<=13);
if(!find)cout<<"无此表"<<endl;}}
return 0;
}
当我输入1、15、8以外的数时,均输出“无此表”。
有人帮我改过,说还要在 start和end相差1时的检查两者并退出的处理过程。
这是他改过的:
#include<iostream>
using namespace std;
int main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int p,mid,start,end;
while(cin>>p){
start=0;end=14;
if(p>a[0]||p<a[14])cout<<"无此表"<<endl;
else if(p==a[0])cout<<"该数是数组中第1个元素的值"<<endl;
else if(p==a[14])cout<<"该数是数组中第15个元素的值"<<endl;
else {bool find=false;
do{
if((end-start)<=1){
if(p==a[start]){cout<<"该数是数组中第"<<start+1<<"个元素的值"<<endl;find=true;break;}
if(p==a[end]){cout<<"该数是数组中第"<<end+1<<"个元素的值"<<endl;find=true;break;}}
mid=(start+end)/2;
if(p==a[mid]){cout<<"该数是数组中第"<<mid+1<<"个元素的值"<<endl;find=true;break;}
else if(p>a[mid])
start=mid+1;
else
end=mid-1;
}while(mid>=1&&mid<=13);
if(!find)cout<<"无此表"<<endl;}}
return 0;
}
问题又出在哪里呢?求大虾们赐教...本人不胜感激。
展开
 我来答
斯文且闲雅丶风光2
2010-12-22 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:87万
展开全部
#include<iostream>
using namespace std;
int main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
int p,mid,start,end;
while(cin>>p){
start=0;end=14;
if(p>a[0]||p<a[14])cout<<"无此表"<<endl;
else if(p==a[0])cout<<"该数是数组中第1个元素的值"<<endl;
else if(p==a[14])cout<<"该数是数组中第15个元素的值"<<endl;
else {bool find=false;
do{
if((end-start)<=1){
if(p==a[start]){cout<<"该数是数组中第"<<start+1<<"个元素的值"<<endl;find=true;break;}
if(p==a[end]){cout<<"该数是数组中第"<<end+1<<"个元素的值"<<endl;find=true;break;}}
mid=(start+end)/2;
if(p==a[mid]){cout<<"该数是数组中第"<<mid+1<<"个元素的值"<<endl;find=true;break;}
else if(p>a[mid])
end =mid-1; ////// 算法出现了 问题
else
start =mid+1; /////
}while(mid>=1&&mid<=13);
if(!find)cout<<"无此表"<<endl;}}
return 0;
}
两句算法有问题 上面就是正确的就是改了两行算法而已。 很简单 你看看就明白,你可能大意了。OK 给分吧 老兄。三秋
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图... 点击进入详情页
本回答由AiPPT提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式