P1996 约瑟夫问题

题目描述

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

n m

输出格式:

出圈的编号

输入输出样例

输入样例#1: 复制
10 3
输出样例#1: 复制
3 6 9 2 7 1 8 5 10 4

说明

m,n≤100m, n \le 100

m , n 1 0 0

源代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    int a[n+1],j=n,p=0,k=1;
    for(int i=1;i<n;i++)//指向下一个节点
        a[i]=i+1;
        a[n]=1;
    while(p<n)
    {
        while(k<m)
        {
            j=a[j];
            k++;
        }
        cout<<a[j]<<" ";
        p++;
        a[j]=a[a[j]];
        k=1;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sunpeishuai/article/details/79826891