报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。
题目要求很简单,用一个函数记录退出者编号,最后把退出者编号组成的数组打印出来。个人思路为新设定一个数组用于模拟游戏情况,再用一个参数记录退出的人数(同时也是退出顺序)
该方法不含指针,只有数组
下面附上代码和注解
int main()
{
int out[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
CountOff( n, m, out );
for ( i = 0; i < n; i++ )
printf("%d ", out[i]);
printf("\n");
return 0;
}
void CountOff( int n, int m, int out[] )
{
int a[n]; /*建立一个数组a用于模拟参与者,当单个单元内有内容时即表示该位置上有人在*/
int count=0,quit=0;/*count用于计数判断选手是否达到退出的条件,quit用记录退出的人数*/
for(int i=0;i<n;i++)
{
a[i]=1;
out[i]=0;/*将两个数组赋值初始化*/
}
for(int i=0;i<n;i++)
{
if(a[i])/*如果在第i个位置上有人,再执行报数代码*/
{
count++;
if(cou