问题描述:给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集合S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集合S的众数是2,其充数为3。
输入样例:
6
1 2 2 2 3 5
输出样例:
2 3
#include <stdio.h>
#define N 100
int main()
{
int n;
int num[N];
//利用一个键值对,maxKey存储众数, maxValue存储众数的个数
int maxKey;
int maxValue;
scanf("%d", &n);
for(int i=0; i<n;i++)
scanf("%d", &num[i]);
//冒泡排序
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
int t;
if(num[i]>num[j])
{
t = num[i];
num[i] = num[j];
num[j] = t;
}
}
}
maxKey=num[0];
//nowValue 临时的众数个数
int nowValue=0;
for(int i=0;i<n;i++)
{
if(maxKey == num[i])
{
nowValue++;
maxValue=nowValue;
}
else
{
nowValue--;
}
// 更改为新的众数
if(nowValue==0)
{
maxKey=num[i];
nowValue = maxValue;
}
}
printf("%5d %5d", maxKey, maxValue);
}