• 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 ; 
    }
  • 相关阅读:
    Boost线程库学习笔记
    sizeof运算符
    用法char ch=getchar()正确性详解
    C语言中的缓冲输出
    算术运算的溢出行为 and 一个数内存中表示1的个数
    ARP、RARP、ICMP、ping
    http和https协议
    关于宋词频率统计(R语言)
    Backbone.js API中文文档
    腾讯小Q书桌图标怎么实现的啊?
  • 原文地址:https://www.cnblogs.com/yi-ye-zhi-qiu/p/8902505.html
Copyright © 2020-2023  润新知