注册 登录
编程论坛 C++教室

哪里错了?

haiyungood 发布于 2008-11-19 18:37, 683 次点击
自己用折半查找法写了个程序但不知道哪里错了,请各位帮忙看看是哪里错了,谢谢了,
程序如下:
#include<iostream>
using namespace std;
int main()
{
int a[11]={11,10,9,8,7,6,5,4,3,2,1};
int i,l,h,m ,n;
l=0;
h=10;
m=(l+h)/2;
cout<<"请输入要查找的数:";
cin>>n;
for(i=0;i<11;i++)
if((n>a[0])||(n<a[10]))
{
cout<<"无此数。"<<endl;
break;
}
else if(n==a[m])
{
cout<<"要查找的数为第"<<m+1<<"个元素."<<endl;
break;
}
else if(n<a[m])l=m+1;
else h=m-1;
return 0;
}
4 回复
#2
debroa7232008-11-19 21:04
...
else if(n<a[m])m=m+1;
else m=m-1;
...
l和h换成m
#3
debroa7232008-11-19 21:09
你是想用折半查找吧,做了点修改:
#include "stdafx.h"
#include<iostream>

using namespace std ;

int _tmain(int argc, _TCHAR* argv[])
{
    int a[11]={11,10,9,8,7,6,5,4,3,2,1};
    int i,l,h,m ,n;
    l=0;
    h=10;
    m=(l+h)/2;
    cout<<"请输入要查找的数:";
    cin>>n;    
    if((n>a[0])||(n<a[10]))
    {
        cout<<"无此数。"<<endl;
    }
    else
    {
        for(i=0;i<11;i++)
        {
            if(n==a[m])
            {
                cout<<"要查找的数为第"<<m+1<<"个元素."<<endl;
                break;
            }else if(n<a[m])
            {
                l=m+1;
                m=(l+h)/2;
            }else
            {
                h=m-1;
                m=(l+h)/2;
            }
        }
    }
    return 0;
}
#4
haiyungood2008-11-19 22:44
谢谢了,现在终于懂了,
#5
hitcolder2008-11-20 16:25
for(i=0;i<11;i++)
{ m=(l+h)/2;                     /////楼主只要把这句话换到这里就OK了,再加个{}就没问题了
if((n>a[0])||(n<a[10]))
{
cout<<"无此数。"<<endl;
break;
}
else if(n==a[m])
{
cout<<"要查找的数为第"<<m+1<<"个元素."<<endl;
break;
}
else if(n<a[m])l=m+1;
else h=m-1;
}

程序本身并没有什么问题,就是一句话的位置不太对
1