3332: 二分查找
时间限制: 1 Sec 内存限制: 128 MB
提交: 117 解决: 29
[提交][状态][讨论版][命题人:acm4302]
题目描述
小C同学有n个苹果,每个苹果的甜度都不相同,他现在想要吃一个甜度为a的苹果,可他又不想一个个去找,聪明的你能帮他在最少次数(相对次数最少)内找出甜度为a的苹果吗。
输入
第一行输入苹果的个数n(0<n<300000)
下面n行从小到大输入苹果的甜度。(保证没有重复)
第n+2行,输入需要找的苹果的甜度
输出
若找到,输出你寻找的次数。否则,输出"I can't find it."
样例输入
5 1 2 3 4 5 2
样例输出
3
来源
这个题还是挺坑的,提交了好几遍,要揣摩测试数据,不同的二分查找对于不同的数据每次查找的次数可能是不同的,是不是有点绕口 hhhhha~
欢迎各路大佬评论批评
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
int a[n+1];
for(int i = 1;i <= n;i ++)
cin >> a[i];
int m,goal,ans = 0,start = 1,flag = 0;
cin>>goal;
while(start <= n){
ans ++;
m = start+ (n-start)/2;
if (a[m] == goal) {
cout << ans;
flag = 1;
break;
}
else if (a[m] > goal) n = m-1;
else start = m+1;
}
if(flag==0){
cout<<"I can't find it.";
}
return 0;
}