1. 程式人生 > >眾數問題 程式碼量少,易理解 重數眾數

眾數問題 程式碼量少,易理解 重數眾數

問題描述:

給定含有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;
}