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;
}

 

 

 

版权声明:本文为AWCXV原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/AWCXV/p/7632502.html