侧边栏
首页代码

例题5-1 UVa10474 Where is the Marble? 排序和查找

题目大意为输入N个数字 然后从中查找M个数字 找出从小到大排序后的数字中目标数字是第几个

#include<bits/stdc++.h>
using namespace std;
int a[10000000];
int main()
{
    int n,m,c = 0;
    while((cin >> n >> m) && n && m)
    {
        for(int i = 0;i < n;i++)
        {
            cin >> a[i];
        }
        sort(a,a + n);
        int *p ,q;
        printf("CASE# %d:\n",++c);
        for(int i = 0;i < m;i++)
        {
            cin >> q;
            p = lower_bound(a,a + n,q);
            if(*p == q && p - a != n)
                printf("%d found at %d\n",q,p - a + 1);
            else
                printf("%d not found\n",q);
        }
    }
    return 0;
}

lower_bound不仅可以返回一个int值 还可以返回地址

lower_bound 找的是大于等于目标数的第一个数 所以如果没有目标数的话 找到的可能是大于目标数的数或者是数组的最后一位的后一位

因此要设置一个判断  地址p里的值等于目标值 同时 确保返回的不是最后一位的后一位

int *q ,p;
p = lower_bound(a,a+n,p);
if( *q == p && q - a != n)

printf("%d found at %d\n",q,p - a + 1);

以上模板可以找到

posted @ 2020-10-26 23:00  AlexStraightUp  阅读(66)  评论(1编辑  收藏  举报
页脚HTML代码