Day3 排序和逆序对-----Where is the Marble?

it2022-05-05  191

Where is the Marble?

题目网址:link

题意: 多组输入,每组输入一个n,p,接下来输入n个数,每个数占一行,接着输入p个数(即为要从n个数中查找的数),将n个数排序后分别输出要查找的数在排序后的位置;

Sample Input 4 1 2 3 5 1 5 5 2 1 3 3 3 1 2 3 0 0 Sample Output CASE# 1: 5 found at 4 CASE# 2: 2 not found 3 found at 3

思路: 用sort()将n个数排序后,用for循环查找要查找的数的位置; 查找某个数字在数组中的位置是用到lower_bound; 二分查找的函数有 3 个: 头文件: #include lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。 upper_bound(起始地址,结束地址,要查找的数值) 返回的是数值 最后一个 出现的位置。 binary_search(起始地址,结束地址,要查找的数值) 返回的是是否存在这么一个数,是一个 bool值。

代码:

#include <iostream> #include <algorithm> #include <cstdio> using namespace std; int main() { int a[10000],kase = 1; int n,q; while(cin >> n >> q && n != 0 && q != 0) { cout << "CASE# " << kase++ << ":" << endl; for(int i = 0; i < n; i++) cin >> a[i]; sort(a,a+n); int x; while(q--) { cin >> x;; int p = lower_bound(a,a+n,x) - a; if(a[p] == x) cout << x << " found at " << p+1 << endl; else cout << x << " not found" << endl; } } return 0; }

最新回复(0)