1573: 【基础】约瑟夫问题(1504)

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:30 解决:17

题目描述

约瑟夫问题来源于公元1世纪的犹太历史学家Josephus。问题描述,有n个人(分别以编号1,2,3...n表示)围成一个圆圈,从编号为1的人开始进行1~m正向报数,报到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;如此重复下去,直到所有的人全部出列,求最后一个出列人的编号

输入

输入文件仅有一行包含二个用空格隔开的整数N,M (2≤N≤100000,M≤109)。

输出

输出文件仅有一行包含一个整数表示一个整数,表示最后一个人在队列中的编号。

样例输入 复制

8 3

样例输出 复制

7

提示

#include<bits/stdc++.h>
using namespace std;
vector<int> v;

int main(){
	int n,m,i;
    cin>>n>>m;
    for (i=1;i<=n;i++)
        v.push_back(i);
    int c=-1;
    while (v.size()!=1) {
    	c=(c+m)%v.size();
    	v.erase(v.begin()+c);
    	c--;
	}
	cout<<v[0]<<endl;
	return 0;
}