c语言求解Josephus问题

求解Josephus问题。(m为20,总数为44)
各位解答一下,一点不会🙏

关于约瑟夫环的问题,我写过一道类似的题目,只是 m 以及总数和你的不一致,你可以参考一下:[编程入门]报数问题-题解(C语言代码)简单易懂,无需链表


#include <stdio.h>

int main()
{
    int m, n;
    scanf("%d %d", &n, &m); // m是你的学号后2位,n是班级人数

    if (m <= 0 || n <= 0)
    {
        printf("输入数据不合法\n");
        return -1;
    }
    int a[n+1];
    for (int i = 1; i < n; i++)
        a[i] = i + 1;
    a[n] = 1;
    int pos = 1;          // 表示最先从编号为1的人开始数,pos表示当前数到的人的序号
    int cnt = 1;          // 表示当前数到第几个,因为第一个已数过,故cnt=1
    while (a[pos] != pos) // a[pos]!=pos 说明下一个不是自己本身,即人数>=2个,游戏继续
    {
        cnt++;        // 数的人加1,即将序号为a[pos]的猴子已经数过
        if (cnt == m) // 当cnt=n时,说明该人要出圈
        {
            a[pos] = a[a[pos]]; //pos位的直接后继(a[pos]) 改为 a[pos]位的直接后继(a[a[pos]])
            pos = a[pos];       //继续向后数,当前数到的是序号为更新后的a[pos]的,cnt计数为1
            cnt = 1;
        }
        else
        {
            pos = a[pos]; //如何不是第n个猴子,继续往后数,将pos向后移动
        }
    }
    printf("%d\n", pos);

    return 0;
}