约瑟夫问题来源于公元1世纪的犹太历史学家Josephus。问题描述,有n个人(分别以编号1,2,3...n表示)围成一个圆圈,从编号为1的人开始进行1~m正向报数,报到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;如此重复下去,直到所有的人全部出列,求最后一个出列人的编号
输入
输入文件仅有一行包含二个用空格隔开的整数N,M (2≤N≤100000,M≤10^9)。
输出
输出文件仅有一行包含一个整数表示一个整数,表示最后一个人在队列中的编号。
样例
输入
8 3
输出
7
#include <bits/stdc++.h>
using namespace std;
vector<int> v;
int n,m,c;
int main(){
cin>>n>>m;
//初始化容器
for (int i = 0; i < n; i++)
{
v.push_back(i+1);//往容器里添数
}
//c代表删除数的下标
c=-1;
while (v.size()!=1)
{
c=(c+m)%v.size();
v.erase(v.begin()+c);
c=c-1;
}
cout<<v[0]<<endl;
//system("pause");
return 0;
}