CCF201412-1 门禁系统(100分)序列处理
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF201412-1 门禁系统(100分)序列处理相关的知识,希望对你有一定的参考价值。
试题编号: 201412-1
试题名称: 门禁系统
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。
输入格式
输入的第一行包含一个整数n,表示涛涛的记录条数。
第二行包含n个整数,依次表示涛涛的记录中每位读者的编号。
输出格式
输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现。
样例输入
5
1 2 1 1 3
样例输出
1 1 2 3 1
评测用例规模与约定
1≤n≤1,000,读者的编号为不超过n的正整数。
问题链接:CCF201412-1 门禁系统
问题简述:(略)
问题分析:
重写解题博客以及解题程序代码(参见参考链接),解题逻辑更加清晰,解题代码更加简洁,多种解法顺序更加合理。
解法一:计数数组
使用计数数组cnt[],边读入数据,边计数,边输出结果。原始数据不必保存在数组中,可以节省存储。
解法二:使用STL的map计数
用STL的map来做计数,也是一种好的做法。时间和空间的代价略微大一些。
用Python语言程序解题
用Python语言程序来解这个题,从道理上来说,上述解法都可以有。后面给出一个题解程序。
用Java语言程序解题
用Java语言程序来解这个题,从道理上来说,上述解法都可以有。后面给出一个题解程序。
程序说明:(略)
参考链接:
CCF201412-1 门禁系统(100分)
题记:(略)
100分的C语言程序(解法一:计数数组)如下:
/* CCF201412-1 门禁系统 */
#include <stdio.h>
#include <string.h>
#define N 1000
int cnt[N + 1];
int main(void)
{
memset(cnt, 0, sizeof(cnt)); /* 变量初始化:清零 */
int n, a;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a); /* 读入数据 */
cnt[a]++; /* 计数 */
if (i != 1) putchar(' '); /* 输出格式要求结果数据间一个空格隔开 */
printf("%d", cnt[a]); /* 输出结果 */
}
putchar('\\n');
return 0;
}
100分的C++语言程序(解法二:使用STL的map计数)如下:
/* CCF201412-1 门禁系统 */
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<int, int> m;
int n, a;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a; // 读入数据
m[a]++; // 构建Map进行计数
if (i != 1) cout << " "; // 输出格式要求结果数据间一个空格隔开
cout << m[a]; // 输出结果
}
cout << endl;
return 0;
}
100分的Python语言程序(解法一:计数)如下:
# CCF201412-1 门禁系统
n = int(input())
nums = [int(num) for num in input().split()]
for i in range(n):
print(nums[:i + 1].count(nums[i]), end = ' ')
100分的Java语言程序(解法二:使用map计数)如下:
/* CCF201412-1 门禁系统 */
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
public class Main {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
Map<Integer, Integer> map = new HashMap<>();
for (int i = 1; i <= n; i++) {
int a = input.nextInt();
int cnt = 1;
if (map.containsKey(a)) cnt += map.get(a);
map.put(a, cnt);
System.out.print(cnt + " ");
}
}
}
以上是关于CCF201412-1 门禁系统(100分)序列处理的主要内容,如果未能解决你的问题,请参考以下文章