约瑟夫问题是一个非常著名的趣题,即由n个人坐成一圈,按顺时针由1开始给他们编号。然后由第一个人开始报数,数到m的人出局。现在需要求的是最后一个出局的人的编号。
给定两个int n和m,代表游戏的人数。请返回最后一个出局的人的编号。保证n和m小于等于1000。
输入样例
5 3
输出样例
4
#include <iostream>
#include <vector>
using namespace std;
int getNumber(int x, int m) {
if (m == x) {
return 1;
} else {
return x;
}
}
int getResult(int n, int m) {
if (m == 1) {
return n;
}
vector<int> line;
vector<int> temp;
int cnt = 0;
int i;
int index = 1;
for (i = 1; i <= n; i++) {
line.push_back(i);
}
while (line.size() != 1) {
for (i = 1; i <= line.size(); i++) {
cnt++;
if (cnt%m != 0) {
temp.push_back(line[i-1]);
}
}
line.clear();
line = temp;
temp.clear();
}
return line[0];
}
int main() {
int n = 6;
cout << getResult(7, 1) << endl;
return 0;
}