UVA—10474—Where is the Marble—排序查找

UVA—10474—Where is the Marble—排序查找

其实这道题就是先给出一个混乱的序列,需要你对这个序列进行排序,然后再给出一个数字,询问这个数字是否在该序列里出现过
这其实就是考察lower_bound()的用法:返回第一个大于等于待查找的数key在数组中的指针,(这样就可以得到下标啦^__^)然后对比该下标对应的数与key,据可以知道是否出现了,注意如果找到最后结果加1!!!
再加上一点:upper_bound():返回第一个大于key的指针

#include <iostream>
#include <algorithm>
using namespace std;

int a[10010];
int N,Q,m;
int main(){
    scanf("%d%d",&N,&Q);
    int temp = 1;
    while(N&&Q){
        for(int i = 0; i < N ;++i)
            scanf("%d",&a[i]);

        sort(a,a+N);
        printf("CASE# %d:\n",temp++);
        while(Q--){
            scanf("%d",&m);
            int t = lower_bound(a,a+N,m) - a;
            if(a[t] == m) printf("%d found at %d\n",m,t+1);
            else printf("%d not found\n",m);
        }

        scanf("%d%d",&N,&Q);
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/Love_Yourself_LQM/article/details/81699264
今日推荐