求众数问题算法的思路(用递归与分治策略)

给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为众数.例如,S={2,4,5,7,1,2,2,6,9,7}S的众数为2,其重数为3 对于这个问题本人还没有任何思路,不知道怎么下手,恳请有经验的哥哥姐姐们指点!!求此问题的解决思路

第1个回答  2012-02-09
题目要求输入若干不超过100的非负整数,输出众位数,若有多个,从小到大输出。
#include <stdlib.h>
#include <string.h>
int main()
{
int n;
scanf("%d",&n);
int i,j,a[100],m,max=0;
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
{
scanf("%d",&m);
a[m]++; //这是程序的巧妙之处,利用数组的下标作为出现数字的保存,而且避免了相同数字的重复记录。
}
for(i=0;i<100;i++)
for(j=0;j<100;j++)
{
if(a[i]>a[j]&&a[i]>max) //利用变量储存最大数,想了挺久才想出加上a[i]>max的条件。
max=a[i];
}
for(i=0;i<100;i++)
if(a[i]==max)
printf("%d ",i);
return 0;
}
第2个回答  2012-02-02
不用递归可以吗?我想先排个序,然后相同的数字一定会在一起的,然后数一数哪一种数是最多的就行了,我以前写过.递归分治好像没什么优势吧本回答被网友采纳
相似回答