查找(北邮上机)

前言:

21考研,不论能否进复试记录一下准备路上写下的垃圾代码。本来啃《算法笔记》,但是感觉太多了做不完,改做王道机试指南。

题目描述:

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

输入描述

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

注意:白鼠的重量各不相同。

输出描述:

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

解答

#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<stdio.h>
using namespace std;

bool binarysearch(vector<int>vi, int tag) {
    
    
	int left = 0, right = vi.size() - 1;
	while (left <= right) {
    
    
		int mid = (left + right) / 2;
		if (vi[mid] == tag)
			return true;
		else if (vi[mid] < tag)
			left = mid + 1;
		else
			right = mid - 1;
	}
	return false;
}
int main()
{
    
    	
	int n,temp,tag,time;
	bool res;
	while (scanf("%d", &n) != EOF) {
    
    
		vector<int> vi;
		for (int i = 0; i < n; i++) {
    
    
			scanf("%d", &temp);
			vi.push_back(temp);
		}
		sort(vi.begin(), vi.end());
		cin >> time;
		for (int i = 0; i < time; i++) {
    
    
			scanf("%d",&tag);
			res = binarysearch(vi, tag);
			if (res)
				printf("YES\n");
			else
				printf("NO\n");
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44897291/article/details/112788200