YTU 2852: 二分查找

Posted wx62f237590ad0d

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YTU 2852: 二分查找相关的知识,希望对你有一定的参考价值。


2852: 二分查找


时间限制: 1 Sec   内存限制: 128 MB

提交: 215  

解决: 79


题目描述


输入不多于20个升序排列的整数,以及一个待查找的数key,输出key在序列中的位置(从0开始计位序)。查找采用二分查找的方法进行,请将下面的程序补充完整。

#include <iostream>
using namespace std;
const int SIZE=20;
int binary_search(int arr[], int n, int k);
int main()

int d[SIZE];
int index, key, num=0;
cin>>key;
while(cin>>d[num])
num++;
index = binary_search(d, num, key);
if(index >= 0)
cout<<index<<endl;
else
cout<<"NO"<<endl;
return 0;

//提交全部程序代码
int binary_search(int arr[], int n, int k)

int i=-1;
int low=_____(1)_____,high=_____(2)_____,mid;
while(low<=high)

mid=______(3)________;
if(arr[mid]==k)

i=mid;
break;

else if(_____(4)_____)
high=mid-1;
else
_______(5)__________;

return i;

输入


先输入要查找的数
下一行输入升序排列的若干整数(不超过20个),以CTRL-Z结束


输出


若要查找的数在序列中,输出其在序列中的位置(从0开始计数),若不能找到,输出NO


样例输入

45
23 36 45 76 81 88 89 91

样例输出

2

你  离  开  了  ,  我  的  世  界  里  只  剩  下  雨  。  。  。

#include <iostream>
using namespace std;
const int SIZE=20;
int binary_search(int arr[], int n, int k);
int main()

int d[SIZE];
int index, key, num=0;
cin>>key;
while(cin>>d[num])
num++;
index = binary_search(d, num, key);
if(index >= 0)
cout<<index<<endl;
else
cout<<"NO"<<endl;
return 0;

//提交全部程序代码
int binary_search(int arr[], int n, int k)

int i=-1;
int low=0,high=n-1,mid;
while(low<=high)

mid=low+(high-low)/2;
if(arr[mid]==k)

i=mid;
break;

else if(arr[mid]>k)
high=mid-1;
else
low=mid+1;

return i;


以上是关于YTU 2852: 二分查找的主要内容,如果未能解决你的问题,请参考以下文章

HDU - 2852 KiKi's K-Number(树状数组+二分)

hdu-2852 KiKi's K-Number---二分+树状数组

题解——冒泡+二分查找

[算法模板]二分查找

二分查找

二分查找