约瑟夫环的实现

在这里插入图片描述
本题要注意的点:
①循环怎么结束??定义一个count(参加游戏的人数),当count>1的时候循环结束
②环形数组


#include 
#include 
#include 
int Game(int n)
{
    int* arr = (int*)malloc(n * sizeof(int));//n个标记
    int i;
    int count = n;//还在参与游戏的人数
    int tmp = 0;//报数器

    for (i = 0;i < n;i++)
    {
        arr[i] = 1;
    }

    i = 0;
    while (count > 1)//***
    {
        if (arr[i] != 0)
        {
            tmp++;
            if (tmp == 3)
            {
                arr[i] = 0;
                count--;
                tmp = 0;
            }
        }
        //i++;//error
        i = (i + 1) % n;//环形
    }
    for (i = 0;i < n;i++)//找最后赢家
    {
        if (arr[i] == 1)
        {
            break;
        }
    }

    free(arr);
    return i + 1;
}
int main()
{    
   printf("%d\n", Game(1));
    printf("%d\n", Game(2));
    printf("%d\n", Game(3));
    printf("%d\n", Game(4));    
}

你可能感兴趣的:(每日一题)