紫书算法 排序与检索 大理石在哪儿(Where is the Marble?,Uva 10474)代码及讲解

现有N个大理石,每个大理石上写了一个非负整数。首先把各数从小到大排序,然后回 答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石上 写着x。排序后的大理石从左到右编号为1~N。(在样例中,为了节约篇幅,所有大理石上 的数合并到一行,所有问题也合并到一行。) 
样例输入: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 

一.这道题主要就是先排序,再查找。
使用sortlower_bound
头文件algorithm

#include<cstdio>
 #include<algorithm> 
 using namespace std; 
 const int maxn = 10000;
  int main() 
  { 
  int n, q, x, a[maxn], kase = 0; 
  while(scanf("%d%d", &n, &q) == 2 && n) //输入石头和问题个数且大理石个数不为0
  { 

  for(int i = 0; i < n; i++) 
  scanf("%d", &a[i]);
     printf("CASE# %d:\n", ++kase); 
  sort(a, a+n); //排序
  while(q--)//问题个数
  { scanf("%d", &x); //输入查找的数字
  int p = lower_bound(a, a+n, x) - a; //在已排序数组a中寻找x
   if(a[p] == x)
    printf("%d found at %d\n", x, p+1); 
    else printf("%d not found\n", x);
     } 
}
return 0;
 } 

****然后关于这个算法的记事本
头文件<algorithm>
sort函数快速排序
形式:sort(a,a+n)   a数组   a+n(n个数)
lower_bound函数查找数
形式:lower_bound(a,a+n,x)-a**

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值