永发信息网

一道C语言结构题,求大神解答: n个人依次报数,每报到m从圈中退出,依次输出退出人的号码(用数组)

答案:2  悬赏:20  手机版
解决时间 2021-02-05 19:41
  • 提问者网友:轻浮
  • 2021-02-05 13:45
一道C语言结构题,求大神解答: n个人依次报数,每报到m从圈中退出,依次输出退出人的号码(用数组)
最佳答案
  • 五星知识达人网友:渊鱼
  • 2021-02-05 14:52
main()
{int a[100],i,j,k;
for(i=0;i<100;i++)
 a[i]=1;
for(i=k=0;k<100;k++)
 {j=0;
  while(j<10)
   {i=(i+1)%100;
    if(a[i])
     j++;
   }
  a[i]=0;
 }
printf("%d
",i);
getch();
}
全部回答
  • 1楼网友:woshuo
  • 2021-02-05 15:33
#include
#include
#include
#include
void c()//清空输入缓冲函数
{
    char c;
    while((c=getchar())!=EOF&&c!=' ');
}
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        {
            next=(next+1)%n;
            if(arry[next]==0)//0表示这个人没有退出
                j++;
        }
        j=0;
        arry[next]=1;//1表示人已退出
        printf("%4d",next+1);
        num--;
    }
    printf(" ");
    for(j=0;;j++)
    {
        if(arry[j]==0)
            break;
    }
    printf("第%4dwin ",j+1);
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯