例题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);
以上模板可以找到