c语言,排列报数问题并退出指定的人,指针

0到排列,首尾相接,从0开始报数
1.报到M时,报数重新计为0.(M退出排列)
2.报数方向固定,从小到大或顺时针,逆时针
3.循环到剩下一人,输出剩下人号码
4.M,N值由用户输入

#include<stdio.h>
void main()
{
int num,i,*p,k,j;
int ch[20];
p=ch;
printf("请输入围成一圈的人数:");
scanf("%d",&num);
for(i=0;i<num;i++)
*(p+i)=i+1;
j=0;
i=0;
k=0;
while(j<num)
{
if(*(p+i)!=0)
{
k++;
}
if(k==3)
{
printf("%d ",*(p+i));
j++;
k=0;
*(p+i)=0;
}
i++;
if(i==num)
{
i=0;
}
}
printf("\n");