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 错误票据计数排序+最值的主要内容,如果未能解决你的问题,请参考以下文章