大理石在哪儿

前言

最近正值清明节放假,自己花时间刷了一些PAT,感觉很不错。

问题描述

现有N个大理石,每个大理石上写了一个非负整数、首先把各数从小到大排序;然后回答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石上写着x。排序后的大理石从左到右编号为1~N。
输入大理石数量和需要回答问题数量,然后输入大理石上的每个非负整数,接着输入x

样例输入:

4 1
2 3 5 1
5
5 2
1 3 3 3 1
2 3

样例输出:

CASE# 1:
5 found at 4
CASE# 2:
2 not found
3 found at 3

算法思路

这里主要是排序函数(sort)和查找函数(lower_bound)的使用,没有其他的算法实现。

代码实现

#include
#include
#include
#define MAX 105
using namespace std;

int main() {
    int m, n, k=0, x;
    int a[MAX];
    int b[MAX];
    memset(a, 0, sizeof(a));
    while(scanf("%d%d", &m,&n) == 2 && m) {
        for(int i=0; i<m; i++)  scanf("%d", &a[i]);
        sort(a, a+m);
        printf("CASE# %d:\n", ++k);
        while(n--) {
            scanf("%d", &x);
            int pos = lower_bound(a, a+m, x) - a;
            if(a[pos] == x) printf("%d found at %d\n", x, pos);
            else printf("%d not found\n", x);
        }
    }
    return 0;
}

你可能感兴趣的:(算法)