约瑟夫环编程,请问应该怎么写?

约瑟夫环问题:有n个人围成一圈。从第一个人开始报数(从1到m报数),凡报到m的人退出圈子,问最后留下的是原来的第几号的那个人?(编程提示:根据人数动态建立数组。假设每次从下标为i得元素开始数数,那么需要删除的是下标为(i+m-1)%n,直到n为1就是留下的那个人)


#include <stdio.h>

int main(void) { 
    int  n,m;
    //输入n和m
    scanf("%d %d",&n,&m);
    
    //根据人数动态建立数组
    int num = n;
    int arr[1000];
    for(int i=0;i<n;i++){
        arr[i]=i+1;
    }
    //循环删除下标为(i+m-1)%num,直到num为1
    int i=0,j;
    while(num > 1){
        for(j=(i+m-1)%num;j<num-1;j++){
            arr[j]=arr[j+1];
        }
        i=(i+m-1)%num;
        num--;
    }
    printf("%d",arr[0]);
    return 0;
}