排序與檢索,UVa 10474,(大理石在哪裏)

題目:有n個大理石,每一個大理石上寫了一個非負整數,首先對其進行排序,而後回答q個問題,每一個問題問是否有一個大理石上寫着某個整數x,如是,則回答哪一個大理石上寫着x,排序後的大理石從左到右編號爲1-n;//能夠循環輸入spa

  • 分析:
  • 第一步先進行排序,用algorithmi頭文件中的sort進行排序,sort(aa,aa+n)//begin(),end();
  • 第二步:尋找寫有數字x的大理石,能夠用algorithmi頭文件中的lower_bound()進行查找;
  • lower_bound的做用是「查找大於或者等於x的第一個位置」;
#include <cstdio>
#include <algorithm>
#include <sstream>

using namespace std;
const int maxn = 10000;
int main()
{
	int n, q, x, aa[maxn], k = 0;
	while (scanf_s("%d %d", &n, &q) == 2)
	{
		printf("CASE# %d:\n", ++k);
		for (int i = 0; i < n; i++)
		{
			scanf_s("%d", &aa[i]);
		}
		sort(aa, aa + n);//進行排序
		while (q--)
		{
			scanf_s("%d", &x);//尋找的數字
			int p = lower_bound(aa, aa + n, x) - aa;
			if (aa[p] == x) {
				printf("%d found at %d\n", x, p + 1);
			}
			else {
				printf("%d not found\n", x);
			}
		}
	}

	return 0;
}
相關文章
相關標籤/搜索