魯智深喫饅頭,約瑟夫環問題

問題:99個人,99個饅頭,來了一個魯智深,找個位置把他放進去,然後每逢五的人,喫一個饅頭,並且退場,最後讓他無法喫。

在講解數組應用等問題中,爲學生展示該問題的求解方法。

問題抽象:

99個饅頭,每次分一個
計數器:1-5
指針:0-99(循環)

當前數組元素值0或者1(數組初始值爲0,當改變成1時,表明i號元素的和尚分到饅頭)

代碼如下:

    int i=0;//饅頭個數
    int j=0;//指針
    int k=1;//計數器
    int a[100]={0};
    while(i<99)
    {
        while(a[j]!=0)//分每個饅頭開始,先找到第一個沒分到饅頭的人
            j=(j+1)%100;
        if(k==5)        //遇到第5人的操作:置數組爲1,饅頭++,指針向下指j++,重新計數k=1
        {
            a[j]=1;
            printf("The %d th people gets the %d th man tou.\n",j,i);
            i++;
            j=(j+1)%100;
            k=1;
        }                    //非第5人的情況
        else
        {
            k++;
            j=(j+1)%100;
        }
    }

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