n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来的第几号

我自己写了个程序,但是和预想的不一样,好像没输出了。不知道哪里错了,请人看看。

img


#include <stdio.h>
#include <string.h>
#include <math.h>

void began(int *a,int n)
{
    for(int i=0;i<n;i++)
    {
        a[i]=0;
    }
}

void out(int *a,int n)
{
    int cnt=n;
    int b;
    
    for(int i=0;i<n;i++)
    {
        b++;
        if(b%3==0)
        {
            a[i]=0;
            cnt--;
            if(cnt==1)
            {
                break;
            }
        }
        if(i==n-1)
        {
            i=-1;
        }
    }
}

int main()
{
    int n;
    scanf("%d",&n);
    int a[n];
    began(a,n);
    out(a,n);
    for(int i=0;i<n;i++)
    {
        if(a[i]==1)
        {
            printf("NO.%d",i+1);
        }
    }
     
}

b没赋值
47行a[i]==1是最后留下的话,前面a数组赋值不应该是1嘛,然后报3的赋0,还是我理解错误了