宏,指针…… 这道编程在考察什么东西啊,

宏,指针……
这道编程在考察什么东西啊,一个套一个的,完全看不懂
输入10 21 3 6 9 0 100 1

#include
#define n 8
    void main()
{
    int i,r,m,a[n],*p;
    m=0;
    r=n;
    p=a;
    for(i=0;i"%d",p+i);
    while(r!=2)
    {
        if(*p!=0)
        {
            m++;
            if(m%3==0)
            {
                r--;
                *p=0;
            }
        }
        if(p==a+n-1)
        p=a;
        else p++; 
    }
    for(i=0;iif(a[i]!=0)
    printf("%d",a[i]);

}

这应该是那个报号码淘汰人吧,报到3的都淘汰,最后不足三个人时结束,输出剩下的人是谁
输入8个整数,如果为0则表示被淘汰。从第一个开始报数,报到3的就淘汰,值改为0,循环报号。直到剩余不为0的元数不足3个,最后输出不为0的元素值

约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。