计算机机试题:二分查找类

题目描述:

输入数组长度 n 
输入数组      a[1...n] 
输入查找个数m 
输入查找数字b[1...m] 

输出 YES or NO  查找有则YES 否则NO 。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

输入:

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

输出:

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

样例输入:

5
1 5 2 4 3
3
2 5 6
  • 1
  • 2
  • 3
  • 4
  • 5

样例输出:

YES
YESNo

分析:此题主要是训练一下二分查找,所以写了个二分查找的代码。

代码如下:

#include <iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>

using namespace std;

int main()
{
    int n;
    int a[101];
    int m;
    int s[101];
    int i;
    int base, end, mid;
    while(scanf("%d", &n)!=EOF)
    {
        for(i=0; i<n; i++)
        {
            scanf("%d", &a[i]);
        }
        sort(a, a+n);
        scanf("%d", &m);
        for(i=0; i<m; i++)
        {
            scanf("%d", &s[i]);
        }
        for(i=0; i<m; i++)
        {
            base = 0;
            end = n-1;
            while(end >= base)
            {
                mid = (base + end)/2;
                if(a[mid]<s[i])
                {
                    base = mid + 1;
                }
                else if(a[mid] > s[i])
                {
                    end = mid -1;
                }
                else
                {
                    printf("YES\n");
                    break;
                }

            }
            if(end <base )printf("NO\n");

        }
    }
}





猜你喜欢

转载自blog.csdn.net/xckkcxxck/article/details/80848235