Xcode写C++(程序练习13:约瑟夫环问题)

约瑟夫环问题:有n个人围成一圈,顺序排号,从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位

考点1:标记数组

考点2:环形处理

考点3:循环结束条件

#include <iostream>
int JosephProblem(int n)
{
    int *arr = (int *)malloc(n*sizeof(int));//标记
    int i;
    for(i=0;i<n;i++)
    {
        arr[i] = 1;//参与游戏
    }
    int count = n;//还在参与游戏的人数
    int tmp = 0;//报数器
    
    i = 0;
    while(count>1)
    {
        if(arr[i]==1)//还在参与游
        {
            tmp++;
            if(tmp==3)//他需要退出游戏
            {
                arr[i] = 0;
                tmp = 0;
                count--;
            }
        }
        //i++;//越界
        i = (i+1)%n;//环形处理
    }
    
    for(i=0;i<n;i++)
    {
        if(arr[i]==1)
            break;
    }
    free(arr);
    return i+1;
}


int main()
{
    for(int i=1;i<5;i++)
    {
        printf("%d\n",JosephProblem(i));
    }    
    return 0;
}

输出结果如下图:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章