报数游戏 用c语言写 输出最后剩下的数字

给定一个从 1 到 n 排序的整数列表。
首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾。
第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数字进行删除,直到列表开头。
我们不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。
返回长度为 n 的列表中,最后剩下的数字。
输入n 的数 输出最后剩下的数字

其实每步都可以知道还剩多少个数字,判断奇偶就可以每次从左到右执行的

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int a = 0;
    scanf("%d", &a);
    int count = a;
    int s[a];
    int flag = 0;
    int pos = 1;
    for (int i = 0; i < a; i++)
    {
        s[i] = i + 1;
    }
    while (count > 1)
    {

        if (!flag)
        {
            pos = 1;
            for (int i = 0; i < a; i++)
            {
                if (s[i])
                {
                    pos++;
                    if (pos == 2)
                    {
                        pos = 0;
                        s[i] = 0;
                        count--;
                        if (count == 1)
                            break;
                    }
                }
            }
            flag ^= 1;
        }
        else
        {
            pos = 1;
            for (int i = a - 1; i >= 0; i--)
            {
                if (s[i])
                {
                    pos++;
                    if (pos == 2)
                    {
                        pos = 0;
                        s[i] = 0;
                        count--;
                        if (count == 1)
                            break;
                    }
                }
            }
            flag ^= 1;
        }
    }
    for (int i = 0; i < a; i++)
    {
        if(s[i])printf("%d",s[i]);
    }
    
};