题目大意:先给定N个数,再输入Q个数,将前面N个数重新按升序排列,求后面的Q个数中每个数在升序排序后的N个数中的位置。
解题思路:直接用qsort对前N个数进行升序排列,然后对后面的Q个数每个分别在排序后的N个数中for一遍。
总结:非常水的一道题,对qsort的用法复习了一遍。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int str[10010];
int re[10010];
int cmp(const void *x, const void *y)
{
int *a = (int *)x;
int *b = (int *)y;
return *a - *b;
}
int main()
{
int n, q;
int num = 0;
while (scanf("%d%d", &n, &q) && (n != 0 || q != 0))
{
memset(str, 0, sizeof(str));
memset(re, 0, sizeof(re));
for (int i = 0; i < n; i++)
scanf("%d", &str[i]);
for (int i = 0; i < q; i++)
scanf("%d", &re[i]);
printf("CASE# %d:\n", ++num);
qsort(str, n, sizeof(int), cmp);
for (int i = 0; i < q; i++)
{
int j;
for (j = 0; j < n; j++)
{
if (str[j] == re[i])
{
printf("%d found at %d\n", re[i], j+1);
break;
}
}
if (j >= n)
printf("%d not found\n", re[i]);
}
}
return 0;
}