C语言n个人围成一圈程序设计C语言n个人围成一圈程序设计
高级语言程序设计(C)
课 程 设 计 报 告
系 (部):
专 业 :
班 级
学生姓名 :
指导教师: 成 绩 :
日 期 :
一、 C语言程序题目:
有n个人围成一圈,(假设他们的编号沿顺时针方向依次为1到n),编程序,使用数组来存放数据(人员编号),而后从1号人员开始数起(沿顺时针方向),当数到k时(k〉1由用户输入),该号人员被“淘汰出局”;接着仍沿着顺时针方向从淘汰者的下一人员重新从1开始数起,数到k后,淘汰第二个人;如此继续,直到最后剩下一人为止。请输出现后被“淘...
C语言n个人围成一圈程序
高级语言程序设计(C)
课 程 设 计 报 告
系 (部):
专 业 :
班 级
学生姓名 :
指导教师: 成 绩 :
日 期 :
一、 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,即:当前数到的人在数组中的位置=剩余的人数。这是程序设计的关键。
三、 流程图(见下页):
开始
输入count,size,i,k,n
数组a[count]
Count=-1
Size=n
Size>1? Count=0
i=0 Count=size
i=i+1 Count=count+1
i
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; i1)
{ //进行淘汰直到剩余参与者只有一人
for(int i=0;i
本文档为【C语言n个人围成一圈程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。