现在有n个大理石,每个大理石上面都有一个非负整数,首先把各个数字从小到大排序,然后回答Q个问题。每个问题问是否有一个大理石上写着某个整数x如果是,还要回答那个大理石上面写着x,排序后的大理石的从左到右的标号为1~n。
样例输入:
4 1
2 3 5 1
5
//以上为第一组数据
5 2
1 3 3 3 1
2 3
//以上为第二组数据
样例输出:
5 found at 4
2 not found
3 found at 3
【分析】:这个题目的意思很清楚了,先排序在查找,我们可以利用c++中的algorithm头文件中的sort和lower_bound完成此题,代码如下:
#include <stdio.h>
#include <algorithm>
#include <iostream>
#define maxn 10005
using namespace std;
int main()
{
int t, n, a[maxn], c = 0, x;
while (scanf("%d%d", &t, &n) == 2 && t)//本句话的意思是输入两个整形值,并且t不为0
{
for (int i = 0; i < t; i++)
{
scanf("%d", &a[i]);
}
sort(a, a + t);//排序
while (n--)
{
scanf("%d", &x);
int p = lower_bound(a, a + t, x) - a;//lower_bound(a,a+t,x)是在长度为t的数组a中寻找x,返回大于或者等于x的第一个位置
if (a[p] == x)
printf("%d is found at %d~~~~~~~~~~~~\n", x, p + 1);
else
printf("%d not found!!!!!!!!!!!!!!\n", x);
}
}
return 0;
}