问题描述:
给定含有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;
}