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; }