引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp是由中国计算机学会(CCF)发起的“计算机职业资格认证”考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事IT领域专业技术与技术管理人员,以及高校招考研究生的复试对象。

问题描述

  涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。

输入格式

  输入的第一行包含一个整数n,表示涛涛的记录条数。

  第二行包含n个整数,依次表示涛涛的记录中每位读者的编号。

输出格式

  输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现。

样例输入

  5

  1 2 1 1 3

样例输出

  1 1 2 3 1

评测用例规模与约定

  1≤n≤1,000,读者的编号为不超过n的正整数。

源代码

 # 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 ;
}
04-29 23:58