1152: 二分搜索
Posted 0一叶0知秋0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1152: 二分搜索相关的知识,希望对你有一定的参考价值。
1152: 二分搜索
时间限制: 1 Sec 内存限制: 128 MB提交: 2096 解决: 756
[提交][状态][讨论版][命题人:admin]
题目描述
在有序序列中查找某一元素x。
输入
首先输入一个正整数n(n<=100000),表示该序列有n个整数,然后按从小到大的顺序输入n个整数;
接着是一个正整数m,表示有m次查找;
最后是m个整数,表示m个要查找的整数x。
输出
对于每一次查找,有一行输出。若序列中存在要查找的元素x,则输出元素x在序列中的序号(序号从0开始);若序列中不存在要查找的元素x,则输出"Not found!"。
样例输入
5
1 3 5 7 9
11
-1
1
2
3
4
5
6
7
8
9
10
样例输出
Not found!
0
Not found!
1
Not found!
2
Not found!
3
Not found!
4
Not found!
查找区间左闭右开
#include<iostream> using namespace std ; #define maxn 110000 int n , m , x ; int num[maxn] ; bool flag ; int pos ; void check(int start , int ends , int x){ if(ends<start){ return; } int mid = (start+ends)/2 ; if(num[mid] == x){ pos = mid ; flag = true ; return; // 找到 }else if(x<num[mid]){ check(start , mid-1 , x) ; }else if(x>num[mid]){ check(mid+1 , ends , x) ; } } int main(){ cin>>n ; for(int i=0 ; i<n ; i++){ cin>>num[i] ; } cin>>m ; while(m--){ cin>>x ; flag = false ; check( 0 , n , x) ; if(flag==false){ cout<<"Not found!"<<endl ; }else{ cout<<pos<<endl ; } } return 0 ; }
以上是关于1152: 二分搜索的主要内容,如果未能解决你的问题,请参考以下文章
UVA 1152 4 Values whose Sum is 0
UVa-1152 4 Values Whose Sum Is 0