• 折半查找


    试题描述
    大魔导师培根曾经说过:“读书使人明智,读书使人聪慧,演算使人精密,哲理使人深刻,伦理学使人有修养,逻辑修辞使人善辩。”由此可见书籍的重要性是不可言喻的。而与书籍天天打交道的书籍管理员,更是夺天地之造化,吸日月之精华的“神之职业”。据史料记载,魔法世界从古至今诞生众多的不平凡的人物中,有不少人曾经做过“图书管理员”,如道家学派创始人老子,微软公司创始人比尔,少林藏经阁的扫地神僧等等。所以,作为以马虎自负出名的楚继光,在魔法学院的社会实践活动中又怎么会放过这“天将降大任于斯人也”的必经锻炼呢。但想成为一个合格的图书管理员并不容易,他必须能够在一排(10000以内)已按编号从小到大排好序的图书中,快速的按照编号,查找到某本书所在的位置。
    输入
    第一行包含一个正整数 N ,表示有 N 个书的编号,第二行是 N 个正整数(表示书的编号),两数之间用一个空格分隔,第三行包含一个正整数 M 表示要查找的书的编号。
    输出
    如果能找到就输出两个数,第一个数表示 M 的位置(位置从1开始),第二个数表示用折半查找法查找的过程中比较的次数,两数之间用一个空格分隔。如果不能找到 M 则输出 -1.
    输入示例
    3 2 4 6 4
    输出示例
    2 1
    其他说明
    所有输入的数都不超过 10000 。
    #include <iostream>
    using namespace std;
    int main()
    {
        int head,tail,mid,n,m,a[10010],ans=1,f=0;
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        cin>>m;
        head=1;
        tail=n;
        for(int i=1;i<=n;i++)
        {
            mid=(head+tail)/2;
            if(a[mid]==m)  
            {
                cout<<mid<<" ";
                f=1;
                break;
            }
            else
            {
                if(a[mid]<m)
                    head=mid;
                if(a[mid]>m)
                    tail=mid;
                ans++;
            }
        }
        if(f==1)
            cout<<ans;
        else
            cout<<"-1";
    }
        
    View Code
  • 相关阅读:
    学习攻略丨如何进阶为一名Web安全高手?
    审计篇丨PHPcms9.6.3后台XSS审计
    新手篇丨Python任意网段Web端口信息探测工具
    ZZZPHP1.61 代码审计-从SQL注入到Getshell
    FOFA爬虫大法——API的简单利用
    菜鸟如何反转到资深Web安全工程师
    实战经验丨CTF中文件包含的技巧总结
    一名合格的Web安全工程师之成长路径
    CTF丨2019互联网安全城市巡回赛·西安站,我们来了!
    暖春许愿季丨i春秋给你送福利
  • 原文地址:https://www.cnblogs.com/jason2003/p/6574425.html
Copyright © 2020-2023  润新知