f(sixleaves) = sixleaves

重剑无锋 大巧不工

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  95 随笔 :: 0 文章 :: 7 评论 :: 0 Trackbacks
题目意思简单,模型就是排序,查找是否有该数字,有则输出位置,没有输出提示。
具体用到了C++ STL的两个函数模板一个是sort、一个是lower_bound,lower_bound(begin, end, v);
lower_bound与strchr类似,但它使用的是迭代器begin与end返回的是大于等于v的最小数所在的迭代器,
使用该模板函数需要注意的问题是,必须是针对已经排序好得数字,具体代码如下。
 1 #include <cstdio>
 2 #include <algorithm>
 3 
 4 using namespace std;
 5 const int maxn = 10000;
 6 
 7 
 8 int main() {
 9     
10     int n, q, x, a[maxn], kase = 0;
11     while (scanf("%d%d", &n, &q) == 2 && n) {
12         
13         for (int i = 0; i < n; i++) scanf("%d", &a[i]);
14         sort(a, a+n);
15         printf("CASE# %d:\n", ++kase);
16         while (q--) {
17             
18             scanf("%d", &x);
19             int p = lower_bound(a, a+n, x) - a;
20             if (a[p] == x) printf("%d found at %d\n", x, p + 1);
21             else printf("%d not found\n",x);
22             
23         }
24     }
25     return 0;
26 }
posted on 2015-02-12 10:43 swp 阅读(103) 评论(0)  编辑 收藏 引用 所属分类: algorithm

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理