求大家帮帮忙,解一下这个c语言的编程题目!!!!!

有100个人按编号1-100排成一队,从1开始按1-2-3-1-2-3报数,凡报到3者出列,直至报数到队尾,然后又从队尾的人向队首报数(从1开始报),仍然是报到3者出列,上述过程重复出列,直至队列只剩下2人,求2人的原始编号。

猴子选大王——CSharp数组

 #include <stdio.h>
#include <stdlib.h>
#define MAX 100
#define LIVE 0
#define DEAD 1
int main()
{
    int a[MAX]={LIVE};
    int alive = MAX;
    int i, j = 1;
    bool flag = false;
    while(true)
    {
        for(i = 0; i < MAX; i++)
        {
            if(a[i] == LIVE)
            {
                j++;
                if(j == 3)
                {
                    a[i] = DEAD;
                    alive --;
                    j = 1;
                    if(alive == 2)
                    {
                        flag = true;
                        break;
                    }
                }
            }
        }
        if(flag) break;
        else
        {
            j = 1;
            for(i = MAX - 1; i >=0; i--)
            {
                if(a[i] == LIVE)
                {
                    j++;
                    if(j == 3)
                    {
                        a[i] = DEAD;
                        alive --;
                        j = 0;
                        if(alive == 2)
                        {
                            flag = true;
                            break;
                        }
                    }
                }
            }
            if(flag) break; 
        } 

    }
    printf("存活下来的人为:");
    for(i = 0; i < MAX; i++)
    {
        if(a[i] == LIVE)
            printf(" %d", i);
    } 
    printf("\n");
    return 0;
}

把数组当成一个循环表,将出对元素置为-1,同时数组个数减1,周而复始,直到数组个数为2

把数组当成一个循环表,将出对元素置为-1,同时数组个数减1,周而复始,直到数组个数为2