zoukankan      html  css  js  c++  java
  • 二分法习题讲解

    #include <iostream>
    using namespace std;
    int num[]={3,5,7,9,10,12,15,20,25,30};//10个数
    int main()
    {
    int x;
    while(cin>>x)
    {
    int L,R,mid;
    L=0;R=9;
    while(L<R) //找到x值的位置
    {
    //使用该方法的原因是如果存在负数的一些情况,可以实现真正的找到中间值的效果,当然,实际使用情况值得考究
    mid=L+(R-L)/2;
    //mid=(L+R)/2
    if (num[mid]>=x) R=mid; //?
    else L=mid+1;//现在就应该注意这个加1的效果了,如果没有,可能最后会陷入一个死循环
    }
    if (num[L]==x){
    cout<<"The x is find in "<<L<<endl;//最后应该是左边的指针指向目标值,否则就算是失败
    }
    else
    cout<<"No find"<<endl;

    //第二种写法:
    int ans=-1;
    L=0;R=9;
    while(L <= R){
    mid = (L+R)/2;
    if(num[mid] == x){
    ans = mid;
    break;
    }else(num[mid] > x){
    R = mid-1;
    }else
    L = mid+1;
    }

    }
    }

    //当在使用第二种方法是不容易陷入死循环中

    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    CRMEB FormBuilder
    CRMEB 异常
    Layui select
    VS 发布报错 NETSDK1152: 找到了多个具有相同相对路径的发布输出文件
    Layui 文档 官网镜像
    datetimepicker 日期显示 年视图 月视图
    SpringBoot
    RabbitMQ
    Shiro
    SpringMVC
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/3852730.html
Copyright © 2011-2022 走看看