LQ0218 错误票据计数排序+最值

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0218 错误票据计数排序+最值相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2013初赛 C++ A组G题

题目描述
某涉密单位下发了某种票据,并要在年终全部收回。

每张票据有唯一的 ID 号。全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。

因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造成了某个 ID 断号,另外一个 ID 重号。

你的任务是通过编程,找出断号的 ID 和重号的 ID 。

假设断号不可能发生在最大和最小号。

输入描述

要求程序首先输入一个整数 N (N<100)表示后面数据行数。

接着读入 N 行数据。

每行数据长度不等,是用空格分开的若干个(不大于 100 个)正整数(不大于105)。

输出描述
要求程序输出 1 行,含两个整数 m,n,用空格分隔。

其中,m 表示断号 ID,n 表示重号 ID。

输入输出样例
示例
输入

2
5 6 8 11 9
10 12 9

输出

7 9

问题分析
用计数排序来实现,需要同时求出最大值和最小值。

AC的C语言程序如下:

/* LQ0218 错误票据 */

#include <iostream>
#include <cstring>

using namespace std;

#define N 100000
int cnt[N + 1]; 

int main()

    memset(cnt, 0, sizeof cnt);
    int n, a, maxa = 0, mina = N + 1, d;
    cin >> n;
    while (cin >> a) 
        maxa = max(maxa, a);
        mina = min(mina, a);
        if (++cnt[a] > 1) d = a;
    
    
    for (int i = mina; i <= maxa; i++)
        if (cnt[i] == 0) 
            cout << i << " " << d << endl;
            break;
        
    
    return 0;

以上是关于LQ0218 错误票据计数排序+最值的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯-错误票据

错误票据

错误票据 --- 蓝桥杯

蓝桥杯历届试题 错误票据

错误票据

错误票据