C语言n个人围成一圈程序设计.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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] 结束

文档评论(0)

tianma2015 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档