题目1173:查找

题目1173:查找

时间限制:1 秒

内存限制:32 兆

学到的知识:使用二分查找之前数组一定是排好序的。切记

题目描述:

输入数组长度 n 
输入数组      a[1...n] 
输入查找个数m 
输入查找数字b[1...m] 
 
输出 YES or NO  查找有则YES 否则NO 。

输入:

输入有多组数据。
每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100)。

输出:

如果在n个数组中输出YES否则输出NO。

样例输入:
5
1 5 2 4 3
3
2 5 6
样例输出:
YES
YES
NO
//题目1173:查找
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
using namespace std;
int a[102];
int main()
{
    int n;
    int i;
    int m;
    int start,over,mid;
    int flag;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
        }
        sort(a,a+n);
        scanf("%d",&m);
        while(m--)
        {
            int x;
            scanf("%d",&x);
            start=0,over=n-1;
            flag=0;
            while(over>=start)
            {
                mid=(over+start)/2;
                if(a[mid]==x)
                {
                    flag=1;
                    break;
                }
                else if(a[mid]>x)
                {
                    over=mid-1;
                }
                else
                {
                    start=mid+1;
                }
            }
            if(flag==1)
                printf("YES\n");
            else
                printf("NO\n");
        }
    }
    return 0;
}

 

posted @ 2016-07-23 09:00  多思考&&多动手  阅读(163)  评论(0编辑  收藏  举报