标题:[求助]基 本 的 折 半 查 找 法
只看楼主
ysgyh
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-2-4
 问题点数:0 回复次数:13 
[求助]基 本 的 折 半 查 找 法

各位高手,不知是我的C++有问题,还是编的有问题,总是在运行后输入值时出现错误,还请多多指教,
另外如果运行成功的话,请在你们的机子上输入一下2和3看是否能查出在数组 中的位置,谢谢!!!!!
/**********************************************************
基 本 的 折 半 查 找 法
*********************************************************/
#include <iostream.h>
void main()
{
int a[6]={2,3,9,24,89,98};
int mid,max,min,t;
mid=0;
max=5;
cout<<"请输入要找的数:";
cin>>t;
while(max>min)
{
mid=(max+min)/2;
if(a[mid]==t)
{cout<<"数组中位置是"<<mid<<endl;
break;
}
if(a[mid]>t)
max=mid;
if(a[mid]<t)
min=mid;
}
cout<<"您查找的数不在该数组内"<<endl;
}

搜索更多相关主题的帖子: include 
2006-02-05 16:11
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
得分:0 
mid=0;
max=5;

2006-02-05 16:46
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
得分:0 
问一下楼主,你在第6行,想写的是min=0吧?

另外你这程序运行有点问题吧,输入一个不存在的数就死循环在里面了。while语句重新写一下吧。
while(max>min)
{
mid=(max+min)/2;
if(a[mid]==t)
{cout<<"数?中位置是"<<mid<<endl;
break;
}
if(a[mid]>t)
max=mid;
if(a[mid]<t)
min=mid;
if (min + 1 == max)
{
break;
}
}

这个代码我改得不好,反而弄丢了2 和98 最边上的数字。[em04]

[此贴子已经被作者于2006-2-5 17:53:51编辑过]


成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-02-05 16:48
ysgyh
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-2-4
得分:0 

我第六行就是写的0啊, 改完后你运行的可以了吗,2和3都能查出来吗?


我的还是不行啊.看来是我的C++有问题,谢谢你了

[此贴子已经被作者于2006-2-5 17:56:09编辑过]

2006-02-05 17:32
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
得分:0 

重点是min 你的写的是mid
然后编译会出warning

改之前和之后,我的都能运行,都能查出2,3

上面那个改的有问题。我重新改了一下,下面这个就可以查出所有的了
#include <iostream>
using namespace std;
void main()
{
int a[6]={2,3,9,24,89,98};
int mid,max,min,t;
min=0;
max=5;
cout<<"??入要找的数:";
cin>>t;
int temp = 0;
while(max>min)
{
mid=(max+min)/2;
if(a[mid]==t)
{cout<<"数?中位置是"<<mid<<endl;
break;
}
if(a[mid]>t)
max=mid;
if(a[mid]<t)
min=mid;
if ((max+min)/2 ==mid)
{
temp ++;
if (temp == 1)
{
if (a[min] ==t)
{
cout<<"数?中位置是"<<min<<endl;
break;
}
if (a[max] ==t)
{
cout<<"数?中位置是"<<max<<endl;
break;
}
}
if (temp == 2)
{
cout<<"??找的数不在?数?内"<<endl;
break;
}

}

}
}

[此贴子已经被作者于2006-2-5 18:19:50编辑过]


成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2006-02-05 17:37
love_me
Rank: 1
等 级:新手上路
帖 子:85
专家分:0
注 册:2005-12-29
得分:0 
看不懂你的程序(只是不想太仔细看:-))只是看到逻辑似乎有些奇怪
我来修改一个看看,不对的不要骂我:)
int a[6]={2, 3, 9, 24, 89, 98};
int iy;
cin>>y;
for (int i=0; i<6; i++)
{
if(y==a[i])
{
cout<<"数组中位置是"<<i<<endl;
break;
}
}
cout<<"未在数组中发现此数字"<<endl;

灌水无罪! 顶贴有理! <0_0>
2006-02-05 18:27
ysgyh
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-2-4
得分:0 

柳儿姐谢谢了,我这运行成功了,是我太马虎了,另外我刚学的C++所以再多问一下
using namespace std 干什么用的

2006-02-05 18:59
ysgyh
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-2-4
得分:0 
6楼的朋友你的程序有点错误,如下::
int a[6]={2, 3, 9, 24, 89, 98};
int iy;//少逗号
cin>>y;
for (int i=0; i<6; i++)//括号内不要有int
{
if(y==a[i])
{
cout<<"数组中位置是"<<i<<endl;
break;
}
}
cout<<"未在数组中发现此数字"<<endl
还有你的程序运行2,3,9.....时,虽然能找出位置,但是总会有"未在数组中发现此数字"
我建议你看一下柳儿姐的程序,很有帮助.
谢谢你的回复!!!!!!!!!
2006-02-05 19:08
ElfDN
Rank: 4
等 级:贵宾
威 望:11
帖 子:291
专家分:0
注 册:2005-11-13
得分:0 

//binarysearch
#include<iostream>
using namespace std;
//input:n个元素按升序排列的数组A[1~n]和元素x
int main(){
int A[14]={1,4,5,7,8,9,10,12,15,22,23,27,32,35},x=22,low=0,high=14,mid;
while(low<=high){
mid=(low+high)/2;
if(x==A[mid]) break;
else if(x<A[mid]) high=mid-1;
else low=mid+1;
}
cout<<mid<<endl;
}


2006-02-06 09:36
aiyuheng
Rank: 1
等 级:新手上路
威 望:1
帖 子:656
专家分:0
注 册:2006-1-12
得分:0 
using namespace std 干什么用的

when i want to ask anyone,i will ask myself first.
2006-02-06 10:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-44511-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.066335 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved