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