Time Limit: 10 second
Memory Limit: 2 MB
问题描述
由文件给出N个1到30000间无序正整数,其中1<=N<=10000,同一个正整数 可能会出现多次,出现次数最多的整数称为众数。
[编程任务]:求出该文件中的众数M及它出现的次数num。
Input
两行,第一行为正整数的个数N,第二行为n个正整数。
Output
有若干行,每行两个数,第一个是众数,第二个众数出现的次数。(s输出按从小到大一次输出每行)
Sample Input
12
2 4 2 3 2 5 3 7 2 3 4 3
Sample Output
2 4
3 4
【题解】
计数排序,在计数排序的时候不断更新最大值 就好。最后在for 1 到30000 如果数字出现的次数等于最大值就输出。
【代码】
#include <cstdio>
const int MAXN = 30000;
int n,bo[MAXN+10],maxnumber = 0,tmax;
void input_data() {
for (int i = 1; i <= MAXN; i++) bo[i] = 0; //先初始化一下
scanf("%d",&n);
for (int i = 1; i <= n; i++) {
int temp;
scanf("%d",&temp); //输入一个数字后就直接递增数目
bo[temp]++;
if (bo[temp] >= maxnumber) {
maxnumber = bo[temp];
tmax = temp;
}
}
}
void output_data() {
for (int i = 1; i <= MAXN; i++)
if (bo[i] == maxnumber) //如果等于出现的最多次数就输出。
printf("%d %d\n",i,maxnumber);
}
int main()
{
input_data();
output_data();
return 0;
}