- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言n个人围成一圈程序设计,n个人围成一圈c语言,n个人围成一圈,n个人围成一圈java,有n个人围成一圈,n个人围成一圈3,c语言int范围,c语言long范围,c语言float范围,c语言longint范围
高级语言程序设计(C)
课 程 设 计 报 告
系 (部):
专 业 :
班 级
学生姓名 :
学 号 :
指导教师:
成 绩 :
日 期 :2012.06.25——2012.06.30
C语言程序题目:
有n个人围成一圈,(假设他们的编号沿顺时针方向依次为1到n),编程序,使用数组来存放数据(人员编号),而后从1号人员开始数起(沿顺时针方向),当数到k时(k〉1由用户输入),该号人员被“淘汰出局”;接着仍沿着顺时针方向从淘汰者的下一人员重新从1开始数起,数到k后,淘汰第二个人;如此继续,直到最后剩下一人为止。请输出现后被“淘汰”的人的编号。
题目分析:
把1到n个人的编号存到数组a[]中,用count代表当前数到的人在数组中的位置,用size代表剩余的人数,从1数到k,且每次把count(count初值设置为-1)加上1,(如果没数到k之前count等于size,为了满足题目要求,顺时针继续淘汰,则令count等于0,继续往下淘汰),因为每次循环都淘汰了一个人,所以每次都size减去1,输出第n-size个淘汰者及号码a[count],淘汰者出局后,就不可能再有被数的机会,所以要在数组a[]中把淘汰者删除,删除后,原来后面的编号相应的前移一位,因为删除了淘汰者,而下次是从淘汰这的下一个开始数,也就是说从删除后的淘汰者的前一个的下一个开始,所以,count减一,如此循环直到size等于1为止,并输出幸存者a[0]。
这个程序的关键是实现一圈循环之后怎样继续向下一圈循环,为此想到了count等于size,即:当前数到的人在数组中的位置=剩余的人数。这是程序设计的关键。
流程图(见下页):
说明:1.size表示的是剩余参与者的数目。
2.count记录的是当前数到的人在数组中的位置。
3.count等于size 即:数到最后一人,从头开始数。
C程序代码演示:
#includestdio.h
void main()
{void fun(int n, int k);
int total, num;
printf(请输入总人数:\n);
scanf(%d,total);
printf(请输入淘汰号k:\n);
scanf(%d,num);
fun(total,num);
}
void fun(int n, int k)
{ int *a, size=n, count=-1; //*数组a存储的是n个参与者的编号, 而 size表示的是剩余参与者的数目,按k循环往后数,数到第size个人之后从头开始,count记录的是当前数到的人在数组中的位置,因为初始没有数, 所以初值为-1(数组下标从0开始)*/
a=new int[n];
for(int i=0; in; i++)
{a[i]=i+1;}//这里可以用输入语句scanf(%d,a[i]);来手动输入每个参与者的编号
while(size1)
{ //进行淘汰直到剩余参与者只有一人
for(int i=0;ik;i++)
{count++;
if(count==size)
count=0;}//这个循环是用来数k个人,count就是第k个人在数组中的位置,数到最后一人,从头开始数
size--;//参与者数目减1
printf(第 %d 个淘汰者是 %d 号\n,n-size,a[count]);
for( i=count;i=size;i++)
a[i]=a[i+1];//从数组中删除淘汰者
count--;//因为删除了淘汰者,而下次是从淘汰这的下一个开始数,也就是说从删除后的淘汰者的前一个的下一个开始,所以,count减一*/
}
printf(幸存者是 %d 号\n,a[0]);
}
C程序运行结果:
开始
输入count,size,i,k,n
数组a[count]
Count=-1
Size=n
Count=0
Size1?
Count=size
i=0
Count=count+1
i=i+1
ik?
size=size-1
Count=count-1
输出a[count],a[0]
结束
您可能关注的文档
- 2014试验人员继续教育网络平台钢筋试卷.doc
- 2014试验人员继续教育职业道德试题.doc
- 2014高考英语 Unit5 Canada“The True North”大盘点 新人教版必修3.doc
- 2014鄂州中考英语试题.doc
- 2014高考英语二轮(广东专用)专题限时训练8语法填空.doc
- 2014高考英语抓分训练科普知识型阅读理解1(含答案解析).doc
- 2014高考英语作文十个热门话题预测.doc
- 2014高考英语阅读理解冲刺满分训练24.doc
- 2014高考英语阅读理解答案解析十.doc
- 2015届《创新设计》高考英语(北师大版)一轮活页训练(提升版)5.15 Unit 15 Learning.doc
- 运筹学 第2版 课件 2-3 灵敏度分析.pptx
- 《Python 程序设计(新形态版)》习题及答案 黄凌霄 第1---8章 .docx
- Creo汽车零部件三维设计教程 课件全套 第1--7章 CREO9.0 简介---工程图.pptx
- BIM建模(活页式) 课件89.结构柱绘制.pptx
- 水文测验技术 课件 项目五流量测验.pptx
- 运筹学 第2版 课件 5-3 最小费用最大流问题.pptx
- OpenCV计算机视觉处理 课件 模块四 图像变换.pptx
- OpenCV计算机视觉处理 课件 模块九 图像边缘检测及轮廓检测.pptx
- OpenCV计算机视觉处理 课件 模块六 图像平滑处理.pptx
- 《python程序设计》教案 黄凌霄.docx
文档评论(0)