- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
众数问题Problem description给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。对于给定的由n 个自然数组成的多重集S,编程计算S 的众数及其重数。Input输入的第1行多重集S中元素个数n;接下来的n 行中,每行有一个自然数,值在整数范围内Output程序运行结束时,将计算结果输出。输出文件有2 行,第1 行给出众数,第2 行是重数。如果很多数的出现次数相同则输出最小的那个。Sample Input6122235Sample Output23提示:穷举法:先进行排序,再线性统计(毫无技术含量)分治法,先根据某数X,将小于X的放于其左,大于X的放于其右,统计X出现的次数T,如果X左边数的个数=T,向左递归;如果X右边数的个数T,向右递归//功能:众数问题//作者:邹竞//思路:分治法,先根据某数mid,将小于mid的放于其左,大于mid的放于其右,统计mid出现的次数T,如果X左边数的个数=T,向左递归;如果X右边数的个数T,向右递归//版本:v2.0//日期:2010-08-31#includeiostream#includefstream#includealgorithmusingnamespace std;template typename Typeclass Repeat{protected:int n; //数组元素个数 Type * a; //数组首地址 Type ans; //众数int count; //众数的个数(重数)int Partition (int p, int r, Type x, int t); //以x为基准对a进行划分,t表示x出现了多少次 Type Select(int p, int r, int k); //线性时间选择void Process(int p, int r); //递归分治public: Repeat(int nn); //构造 ~Repeat(); //析构void Process(); //处理void ReadData(fstream fileIn); //读入数据void Output(fstream fileOut); //输出结果};template typename TypeRepeatType::Repeat(int nn){ n = nn; a = new Type [n];}template typename TypeRepeatType::~Repeat(){delete [] a;}template typename Typevoid RepeatType::ReadData(fstream fileIn){int i;for(i = 0; i n; i++) fileIn a[i]; count = 0; ans = 32767;}template typename Typeint RepeatType::Partition (int p, int r, Type x, int t){int i, left = p, right = r; Type * b = new Type [r - p + 1];for(i = 0; i r - p + 1; i++) { b[i] = a[p + i]; }for(i = 0; i r - p + 1; i++) {if(b[i] x) { a[left++] = b[i]; }elseif(b[i] x) { a[right--] = b[i]; } }for(i = left; i = right; i++) { a[i] = x; } t = right - left + 1;delete [] b;return left;}template typename TypeType RepeatType::Select(int p, int r, int k){int i,j; Type x;int t;if (r - p 75) { sort(a + p, a + r + 1);return a[p + k - 1]; }for(i = 0; i = (r - p - 4)/ 5; i++) { sort(a + p + 5 * i, a + p + 5 * i + 5);//将a[p+
您可能关注的文档
最近下载
- ASME AG-1-2019 国外国际标准规范.pdf
- 【行业标准】QSY 1262-2010 机械清管器技术条件.pdf
- 110kV变电站改造施工组织设计.docx
- 5S现场管理检查表.doc
- 小学语文生字描红字帖-五年级下.pdf VIP
- 23S516混凝土排水管道基础及接口图集.pdf VIP
- 医师资格考试试用期考核证明.doc
- 《市场营销学(第4版)》课件 许以洪 第5--7章 市场购买行为分析、市场营销信息系统与市场需求测量、 竞争性市场营销战略.ppt
- 【国联证券】国联低空经济研究系列—eVTOL研究框架.pdf
- 25题计算机科学与技术_计算机应用岗位常见面试问题含HR问题考察点及参考回答.pdf
文档评论(0)