有大L知道这个咋搞吗? 约瑟夫环C实现

img


有大佬知道这个怎么做吗?

# include <stdio.h>

#define MAXLEN 100

int front=MAXLEN-1;//队列初始化
int rear=MAXLEN-1;

void enqueue(int q[],int x) //入队
{
    rear=(rear+1)%MAXLEN;
    q[rear]=x;
}

int dequeue(int q[])  //出队
{
    front=(front+1)%MAXLEN;
    return q[front];
}

int main(int argc, char const *argv[])
{
    int i,j,y,n,m;  //j是,y是,n是参与的人数,m是出列时所报的数
    int q[100];

    n = 100;
    m = 13;

    for(i=1;i<=n;i++) //队列的元素进队
        enqueue(q,i);
    j=n; //j初始化,代表剩余未出列的人数
    printf("输出出列顺序如下所示:");
    while(j!=0) //当报数i=m时删掉此元素,元素出列,i用来计报的数,判断是否出列
    {
        for(i=1;i<=m;i++) {
            y=dequeue(q);   
            if(i!=m){
                enqueue(q,y);
            }
            else
            {
                printf("%2d",y);
                printf(" ");
                j--;
            }
        }
    }
}