题目来源:https://cn.vjudge.net/problem/UVA-10474
题目大意:
有几块标着数字的大理石,把它们顺序排列,给出几个数字,找出首个编号与这些数字相同的大理石在序列中的位置。
解题思路:
STL sort和lower_bound
(由于博主还不太习惯C++所以自己造了个破烂轮子结果最后还造错了(十次WA贡献给写错的排序算法= =))
PS:格式十分神奇所以看清楚条件很重要(case要先打出来)
AC代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10010
void asend(int p[], int m);
int main()
{
int n, q, r=1, c, i, j;
int ma[N], qe;
while (scanf("%d%d",&n,&q)==2 && n)
{
printf("CASE# %d:\n",r);
r++;
for (i=0;i<n;i++)
{
scanf("%d",&ma[i]);
}
asend(ma,n);
for (i=0;i<q;i++)
{
scanf("%d",&qe);
for (j=0,c=0;j<n;j++)
{
if (qe==ma[j])
{
printf("%d found at %d\n",qe,j+1);
c++;
break;
}
}
if (!c)
{
printf("%d not found\n",qe);
}
}
}
return 0;
}
void asend(int p[], int m)
{
int i, j, t;
for (i=0;i<m;i++)
{
for (j=i+1;j<m;j++)
{
if (p[j]<p[i])
{
t = p[i];
p[i] = p[j];
p[j] = t;
}
}
}
}