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;
}

輸出結果如下圖:
在這裏插入圖片描述

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