一道C语言结构题,求大神解答: n个人依次报数,每报到m从圈中退出,依次输...
发布网友
发布时间:2024-10-23 22:13
我来回答
共1个回答
热心网友
时间:2024-10-24 17:05
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<strings.h>
void c()//清空输入缓冲函数
{
char c;
while((c=getchar())!=EOF&&c!='\n');
}
int main()
{
int n,m;
printf("输入人数:");
scanf("%d",&n);
c();
printf("输入报数:");
scanf("%d",&m);
c();
char *arry=(char *)malloc(sizeof(char)*n);//建立动态数组
bzero(arry,0);//置零
int next=-1,num=n,j=0;//next表示下标,从next+1开始报数,num表示还剩多少人,j是计数器表示报数到多少了,从0开始
while(1)
{
if(num==1)//还剩一个
break;
while(j<m)//报数到了退出
{
next=(next+1)%n;
if(arry[next]==0)//0表示这个人没有退出
j++;
}
j=0;
arry[next]=1;//1表示人已退出
printf("%4d",next+1);
num--;
}
printf("\n");
for(j=0;;j++)
{
if(arry[j]==0)
break;
}
printf("第%4dwin\n",j+1);
}