眾數問題 程式碼量少,易理解 重數眾數
阿新 • • 發佈:2018-12-31
問題描述:
給定含有n個元素的多重集合S,每個元素在S中的次數稱為該元素的重數。多重集S中重數最大的元素稱為眾數。
例如:S={1,2,2,2,3,5}。眾數為2,其重數為3。
任務:對於給定的由n個自然陣列成的多重數集S,程式設計計算S的眾數及其重數。
輸入:
第1行多重集S中元素個數n(n<=50000);接下來的n行中,每行有一個自然數
輸出:
輸出有兩行,第1行給出眾數,第2行是重數。(如果有多個眾數,只輸出最小的)
輸入例子:
6
1
2
2
2
3
5
輸出例子:
2
3
思路:
max用於存放最重數,same存放眾數
陣列a存放輸入資料,陣列b下標對應陣列a中相同下標的數的重數。
先把陣列b初始化為0,表示每個數的重數為0,重數最大的數即為眾數,若重數相同,則輸出最小的眾數
程式碼:
#include<stdio.h> #include<limits.h> int main() { int i,j,n,same,max=INT_MIN; int a[5000],b[5000]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;i++) b[i]=0; for(i=0;i<n;i++) for(j=0;j<n;j++) if(a[i]==a[j])b[i]++; for(i=0;i<n;i++) { if(b[i]>max)max=b[i],same=a[i]; if(b[i]==max) { if(a[i]<a[max])max=b[i],same=a[i]; } } printf("%d\n%d",same,max); return 0; }