搜索

一道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);
}
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top