引言: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 源代码
1 # include <stdio.h> 2 # include <stdlib.h> 3 # include <memory.h> 4 5 struct MyData { 6 int key; 7 int value; 8 }; 9 10 int main(void) 11 { 12 int n; //个数 13 int flag = 1; 14 int count = 0; 15 scanf("%d", &n); 16 17 int *input = (int *)malloc(sizeof(int) * n); 18 memset(input, 0, sizeof(int) * n); 19 struct MyData *temp = (struct MyData *)malloc(sizeof(struct MyData) * n); 20 memset(temp, 0, sizeof(struct MyData) * n); 21 22 for (int i = 0; i < n; i++) 23 { 24 scanf("%d", input+i); 25 } 26 27 for (int i = 0; i < n; i++) 28 { 29 for (int j = 0; j < count; j++) 30 { 31 if (input[i] == temp[j].key) 32 { 33 temp[j].value += 1; 34 count += 1; 35 flag = 0; 36 if (i == n-1) 37 { 38 printf("%d ", temp[j].value); 39 } 40 else 41 { 42 printf("%d ", temp[j].value); 43 } 44 break; 45 } 46 } 47 if (flag) 48 { 49 temp[count].key = input[i]; 50 temp[count].value = 1; 51 if (i == n-1) 52 { 53 printf("%d ", temp[count].value); 54 } 55 else 56 { 57 printf("%d ", temp[count].value); 58 } 59 count += 1; 60 } 61 flag = 1; 62 } 63 64 free(input); 65 free(temp); 66 67 return 0; 68 }