引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的“计算机职业资格认证”考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事IT领域专业技术与技术管理人员,以及高校招考研究生的复试对象。
l 问题描述
涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。
l 输入格式
输入的第一行包含一个整数n,表示涛涛的记录条数。
第二行包含n个整数,依次表示涛涛的记录中每位读者的编号。
l 输出格式
输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现。
l 样例输入
5
1 2 1 1 3
l 样例输出
1 1 2 3 1
l 评测用例规模与约定
1≤n≤1,000,读者的编号为不超过n的正整数。
l 源代码
# include <stdio.h>
# include <stdlib.h>
# include <memory.h> struct MyData {
int key;
int value;
}; int main(void)
{
int n; //个数
int flag = ;
int count = ;
scanf("%d", &n); int *input = (int *)malloc(sizeof(int) * n);
memset(input, , sizeof(int) * n);
struct MyData *temp = (struct MyData *)malloc(sizeof(struct MyData) * n);
memset(temp, , sizeof(struct MyData) * n); for (int i = ; i < n; i++)
{
scanf("%d", input+i);
} for (int i = ; i < n; i++)
{
for (int j = ; j < count; j++)
{
if (input[i] == temp[j].key)
{
temp[j].value += ;
count += ;
flag = ;
if (i == n-)
{
printf("%d\n", temp[j].value);
}
else
{
printf("%d ", temp[j].value);
}
break;
}
}
if (flag)
{
temp[count].key = input[i];
temp[count].value = ;
if (i == n-)
{
printf("%d\n", temp[count].value);
}
else
{
printf("%d ", temp[count].value);
}
count += ;
}
flag = ;
} free(input);
free(temp); return ;
}