- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计大作业之寻找多数元素
寻找最大元素
一,问题描述:
令A[1…n]是一个整数序列,A中的整数a如果在A中出现的次数多于,那么a称为多数元素。例如,在序列1,3,2,3,3,4,3中,3是多数元素,因为7个元素中它出现的次数为4,大于3。
设计一个性能比较优异的算法求解这个问题。
二,算法描述:
本算法得益于这样一个观察结论:在原序列中去除两个不同的元素以后,原序列中的多数元素在新的序列中还是多数元素。此结论的数学证明省略。
本算法的语言描述如下:将计数器置1,并令c=A[1],从A[2]开始,逐个的扫描元素,如果被扫描的元素和c相等,则计数器加1;若果元素不等于c,则计数器减1;如果所有的元素都已经扫描完毕并且计数器大于0,那么返回c作为多数元素的候选者。如果在c和A[j](1jn)比较时计数器为0,那么对于A[j+1…n]上的元素递归调用candidate过程。
算法如下:
三,程序代码:
# include stdio.h
# include stdlib.h
int candidate(int A[],int m,int n);
int majority (int A[],int n);
int i=1,count,c,j;
void main()
{
int c,num[100],a,n,j;
j=0;n=0;
printf(please input the numbers and use 00 to stop (you can input 100 numbers) \n);
while(1)
{
scanf_s(%d,a);
if (a!=00)
{
num[j]=a;
j=j+1;
n=n+1;
}
else
break;
}
printf(you have inputed %d numbers totally,n);
printf(\nthe numbers you input are as follows\n);
for(j=0;jn;j++)
printf(%5d,num[j]);
c=majority (num,n);
if (c!=0)
printf(\nand the most number is %d \n,c);
else
printf(\nbut the most number is not exsited);
system(PAUSE);
}
int candidate(int A[],int m,int n)
{
c=A[m];
count=1;
for(j=m+1;jncount0;j++)
{
if(A[j]==c)
count++;
else
count--;
}
if (j==n)
return c;
else
return candidate(A,j+1,n);
}
int majority (int A[],int n)
{
int i;
c=candidate(A,0,n);
for (i=0;in;i++)
if (A[i]==c)
count++;
if (countn/2)
return c;
else
return 0;
}
代码运行结果如下:
(1),没有最大元素的情况
(2)有最大元素的情况
四,递归过程展示:
candidate(1)
j=1,c=A[1]=1,count=1
j=2,A[2]!=c=1,count=0
j=2!=n=10
candidate(3)
j=3,c=A[3]=3,count=1
j=4,A[4]=2!=c=3,count=0
j=4!=n=10
candidate(7)
j=7,c=A[7]=8,count=1
j=8,A[8]=2!=c=8,count
j=8!=n=10
candidate(9)
j=9,c=A[9]=5,count=1
j=10,A[10]=2!=c=5,count=0
j=10=n=10,return c=5
majority:
c=candidate(1)=5
count=0
j=1 to n
count=2
count=25
return none
candidate(1)
j=1,c=A[1]=1,count
j=1!=n=11
j=2,A[2]=2!=c=1,count=0
j=2!=n=11
candidate(3)
您可能关注的文档
- 磁共振的原理.doc
- 磁矩的计算方法.ppt
- 磁路基本定律计算方法.ppt
- 磷酸锂铁综述(维基).doc
- 社科信息资源的评价.ppt
- 福建卷与全国卷的比较.doc
- 福建工程学院 运筹学 期末考 赵忠华 B卷.pdf
- 福建安村矿区寻找隐爆角砾岩矿床的探讨.pdf
- 福建师范大学比较文学与世界文学历年考研真题汇编(网络版整合).doc
- 福建版小学英语全套教材单词表.doc
- 执业药师之《西药学综合知识与技能》练习题库及一套完整答案详解.docx
- 2025年上海市农业机械研究所第二轮招聘博士研究人员笔试模拟试题及完整答案详解1套.docx
- 中国农业科学院幼儿园公开招聘人员笔试备考题库参考答案详解.docx
- (2025)公务员考试时事政治题库带答案详解(最新).docx
- 2025年黑龙江科技大学招聘辅导员11人笔试模拟试题附答案详解.docx
- 江西南昌市机关事务保障中心招聘笔试备考题库含答案详解.docx
- 执业药师之《西药学综合知识与技能》考前冲刺测试卷讲解附答案详解【精练】.docx
- 2025年执业药师之《西药学综合知识与技能》题库试题附答案详解【培优】.docx
- (2025)公务员考试时事政治题库带答案详解(实用).docx
- 云南昭通威信县公安局警务辅助人员招聘21人通告笔试模拟试题及参考答案详解.docx
文档评论(0)