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 ",i,maxnumber); } int main() { input_data(); output_data(); return 0; }