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分)序列处理的主要内容,如果未能解决你的问题,请参考以下文章

CCF - 201412-1 - 门禁系统

CCF 201412-1 门禁系统

CCF_ 201412-1_门禁系统

CCF202112-1 序列查询(100分)序列处理

CCF202112-1 序列查询(100分)序列处理

CSP201412-1:门禁系统