试题描述
大魔导师培根曾经说过:“读书使人明智,读书使人聪慧,演算使人精密,哲理使人深刻,伦理学使人有修养,逻辑修辞使人善辩。”由此可见书籍的重要性是不可言喻的。而与书籍天天打交道的书籍管理员,更是夺天地之造化,吸日月之精华的“神之职业”。据史料记载,魔法世界从古至今诞生众多的不平凡的人物中,有不少人曾经做过“图书管理员”,如道家学派创始人老子,微软公司创始人比尔,少林藏经阁的扫地神僧等等。所以,作为以马虎自负出名的楚继光,在魔法学院的社会实践活动中又怎么会放过这“天将降大任于斯人也”的必经锻炼呢。但想成为一个合格的图书管理员并不容易,他必须能够在一排(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
转载于:https://www.cnblogs.com/jason2003/p/6574425.html
相关资源:折半查找实例
转载请注明原文地址: https://mac.8miu.com/read-24495.html