約瑟夫問題

題目描述
n個人(n<=100)圍成一圈,從第一個人開始報數,數到m的人出列,再由下一個人重新從1開始報數,數到m的人再出圈,……依次類推,直到所有的人都出圈,請輸出依次出圈人的編號.
輸入格式:
n m
輸出格式:
出圈的編號
說明
m,n≤100

數據較小,直接模擬了,應該可以直接用數學推(不確定),推出第幾個出局的是第幾個人。

#include<cstdio>
using namespace std;
int main() {
    int n,m,s=0;
    scanf("%d%d",&n,&m);
    bool visit[200]= {0}; 
    for(int k=0; k<n; k++) { 
        for(int i=0; i<m; i++) {
            if(++s>n)s=1;    //模擬環狀結構
            if(visit[s])i--;    //跳過出局的人
        }
        printf("%d ",s);    //出局
        visit[s]=true;
    }
    return 0;
}
發佈了50 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章