简单的Josephus问题

17个人围成圈,编号为1—17,从第1号开始报数,报到3的倍数的人离开,一直数下去,直到最后只剩下1人。求此人的编号。
用数组做,怎么循环。

长度为17的数组,初始为0,找到第三个不是0的改为1

#include <iostream>
using namespace std;


int main()
{
    int a[17] = {0};
    int j=0,i;
    for(i=0;i<16;i++)
    {
        int count = 0;
        while(1)
        {
            if(a[j] == 0)
            {
                count++;
                if(count == 3)
                    break;
            }
            j = (j+1)%17;
        }
        a[j] = 1;

    }
    for(i=0;i<17;i++)
        if(a[i] ==0)
        {
            cout<<i+1;
            break;
        }
    return 0;
}