求各位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;
}
问题又出在哪里呢?求大虾们赐教...本人不胜感激。 展开
下面是我的代码:
#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;
}
问题又出在哪里呢?求大虾们赐教...本人不胜感激。 展开
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])
end =mid-1; ////// 算法出现了 问题
else
start =mid+1; /////
}while(mid>=1&&mid<=13);
if(!find)cout<<"无此表"<<endl;}}
return 0;
}
两句算法有问题 上面就是正确的就是改了两行算法而已。 很简单 你看看就明白,你可能大意了。OK 给分吧 老兄。三秋
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 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询