【題目講解】約瑟夫問題

2037 約瑟夫問題

N個(gè)人圍成一圈,從第一個(gè)人開始報(bào)數(shù),數(shù)到M的人出圈;再由下一個(gè)人開始報(bào)數(shù),數(shù)到M的人出圈;…輸出依次出圈的人的編號(hào)。

【輸入】輸入N和M。

【輸出】輸出一行,依次出圈的人的編號(hào)。

分析

  • 將這N個(gè)人的狀態(tài)保存到一維數(shù)組中,并設(shè)定初始狀態(tài)為1,表示沒有出圈
  • 循環(huán)判斷當(dāng)前人是否是第m個(gè)人,如果是,這個(gè)人出圈(置為0)
  • 如果出圈人數(shù)和總?cè)藬?shù)相等,表示所有人都出圈了,跳出循環(huán)

參考程序

#include <iostream>
using namespace std;
int main()
{
    int n,m,a[1100],k=1,s=0;
    cin >> n >> m;
    //把n個(gè)的初始狀態(tài)置為1,表示都沒有出圈
    for(int i=1;i<=n;i++) a[i] = 1;
    while(1){
        for(int i=1;i<=n;i++){
            if(a[i]!=0){
                //判斷當(dāng)前的人是否是第m個(gè)人
                 if(k%m==0){
                    cout << i << " ";
                    a[i] = 0; //表示找到這個(gè)人,出圈
                    s++;
                 }
                 k++;
                 if(k>m) k = 1;
            }
        }
        //如果出圈的人與總?cè)藬?shù)相等,那么跳出循環(huán)
        if(s==n) break; 
    } 
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容