众数问题(非遍历统计算法!!!)

来源:百度知道 编辑:UC知道 时间:2024/05/30 04:29:15
«问题描述:

给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。

例如,S={1,2,2,2,3,5}。

多重集S的众数是2,其重数为3。

«编程任务:

对于给定的由n个自然数组成的多重集S,编程计算S的众数及其重数。

«数据输入:

输入数据由文件名为mode*.in的文本文件提供。

文件的第1行多重集S中元素个数n;接下来的n行中,每行有一个自然数。

«结果输出:

程序运行结束时,将计算结果输出到文件mode*.out中。输出文件有2行,第1行给出众数,第2行是重数。

若非遍历统计算法,送30分。!!!!
最好用分治法实现

遍历在所难免滴.否则你根本不可能判断众数是哪个.至于统计,倒是可以试一试不用.
首先你要先用一个float plural1=0,plural2=0;//用于存放众数
int plural_times1=0,plural_times2=0;//用于存放众数出现的次数
先把mode*.in提出来放在一个数组中吧: float[] array_float_in;当然你要尽量大点的数组来存.
然后用一个函数 float* sort(float[]) 将数组排序
现在 现在你可以在数组array_float_in中开始这样作,找相同的数的段将 plural2=这个段的数,将plural_times2=次数.
比较plura_times2与plura_times1取较大的,存入plural1与plural_times1中,然后是下一段.这样你可以得到众数及出现次数.不过这也是变相的统计,只是说把较少的舍去,只有两个变量来存取.要不你想咋整?