1996 约瑟夫问题

难度:普及-

题目类型:模拟

提交次数:1

涉及知识:模拟

题目背景

约瑟夫是一个无聊的人!!!

题目描述

n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出圈,请输出依次出圈人的编号.

代码:

#include<iostream>
using namespace std;
int main(){
    int n, m, i;
    cin>>n>>m;
    int a[n+1];
    for(i = 1; i < n; i++)
        a[i] = i+1;
    a[n] = 1;
    i = 1; int j = n;
    int out = 0;
    while(out!=n){
        while(i<m){
            j = a[j];
            i++;
        }
        cout<<a[j]<<" ";
        out++;
        a[j] = a[a[j]];
        i = 1;
    }
    return 0;
}

备注:

链表,过程想清楚

原文地址:https://www.cnblogs.com/fangziyuan/p/5793525.html