围圈报数新生军训问题

问题遇到的现象和发生背景

新生军训开始了,1班n位同学给自己班级战队取名为“1level1”,呵呵,他们的战队名是一个回文串。汇报表演开始了,n位同学围成一圈,并顺序编号为1~n。1班准备了7面旗帜,分别写上了1,l,e,v,e,l,1。他们从第一个人开始报数(从1到m报数),凡报数为m的人恰好手上举着一个写着字母(数字)的旗帜并退出圈子。依次退出了7个人(1level1的长度为7),按照退出的先后顺序排成一排,旗帜上的字母依次正好组成了1level1。

你是班长,肯定知道班级有多少人,现在知道汇演口令是从1到m报数,怎么去安排哪7人分别拿哪个旗帜?

用代码块功能插入代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法

不会啊

我想要达到的结果

猴子选大王的变种题目,用一个数组做标记,到m的出队,一直到出队7个人为止
运行结果(输入的10表示一共有10个人,3表示报的数):

img

代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int N,i,cnt=1,n,m;
    int k = 0;
    char flag[] = "1level1";
    scanf("%d %d",&N,&m);  //N代表多少人,m是报的数
    n = N;
    int* p = (int*)malloc(sizeof(int)*N);
    for(i=0;i<N;i++) //初始化状态为0
        p[i] = 0;
    while(n)
    {
        for(i=0;i<N;i++)
        {
            if(p[i]==0) //0表示还在队伍中,1表示已经退出
            {
                if(cnt%m==0)
                {
                    cnt = 1; //从1开始报数
                    k++;
                    n--;
                    p[i]=1;
                    printf("第%d个人拿%c\n",i+1,flag[k-1]);
                    
                    if(k==7)
                        return 0;
                }else
                    cnt++;


            }
        }
    }
    delete[] p;
    p=0;
    return 0;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632