有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找法找出数是数组中第几个元素的值。如果该数不在数组中。则打印出“无此数”

虽然又是没教过的东西。。不过好歹看名字都能猜要怎样做。。。不过。。。。花了好长时间都。。。写不出算法- -。。N N D原来要分上下部分的有15个数按由大到小的顺序存放在一个数组中,输入一个数,要求用折半查找法找出数是数组中第几个元素的值。如果该数不在数组中。则打印出“无此数” - flzt5354 - Chaoss Blog。。之后就简单多了

 


  
  1. #include <iostream>  
  2. #include<cmath>  
  3. #include<iomanip>  
  4. using namespace std;  
  5.  
  6.  
  7. int main()  
  8. {   
  9.     const int b=10;//数据长度1开始计算  
  10.      int aa[b];  
  11.      int a,m=0,kais,jies,mid;  
  12.     bool f=true,t;  
  13.      char d;  
  14.  
  15.    
  16.  
  17.  
  18.        
  19.      cout<<"请输入数组,从大到小排列"<<endl;  
  20.      for(m=1;m<=b;m++)  
  21.          cin>>aa[m];  
  22.      cout<<endl;  
  23.       
  24.  
  25.      
  26.  do{  
  27.   cout<<"请输入查询的号码:";  
  28.        cin>>a;  
  29.      cout<<endl;  
  30.     
  31.       m=0;   
  32.       t=false;  
  33.    kais=1;  
  34.    jies=b;  
  35.      if((a>aa[kais])||(a<aa[jies])) m=-1;  
  36.       
  37.        
  38.       while((!t)&&(kais<=jies))  
  39.    {  
  40.          mid=(kais+jies)/2;  
  41.              
  42.                
  43.  
  44.  
  45.              if(a==aa[mid])  
  46.          {   m=mid;  
  47.        cout<<a<<"的位置在第"<<m<<" "<<endl;  
  48.              t=true;  
  49.          }  
  50.          else if (a>aa[mid])  
  51.      
  52.     jies=mid-1;  
  53.  
  54.    else 
  55.     kais=mid+1;  
  56.    }  
  57.  
  58.   if((!t)||(m==-1))  
  59.   cout<<"查无此数"<<endl;  
  60.  
  61.        cout<<"继续查找吗?(Y/N)";  
  62.              cin>>d;  
  63.     if(d=='n'||d=='N'){f=false;}  
  64.                
  65.     
  66.  
  67.  }while(f);  
  68.  
  69.    
  70.  
  71.  
  72. }