网站大量收购闲置独家精品文档,联系QQ:2885784924

第2节作业参考程序.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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+

文档评论(0)

00625 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档