有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入
初始人数n
输出
最后一人的初始编号
样例输入
#include<iostream>
using namespace std;
#include<vector>
int main() {
int n;
cin >> n;//输入参与人数
vector<int>v;
int s = 1;
v.push_back(n);//将一个位置存储当前参与人数
while (s<=n) {
v.push_back(1);
s++;
} //初始化数组,将未报数的人初值设为1
int count = 1; //记住当前是第几个人报数
int num = 1;
while (v[0] > 1) {
if (count == 3) {
v[num] = 0;
v[0]--;
count %= 3;
} //喊道3的人数组值变为0,并将参与人数减1 ,重置num的数值
if (num >= n) {
num %= n;
} //当人数超过参与人数时,重置计数器
count++;
num++;
while (v[num] == 0&&v[0]) {
num++;
if (num > n) {
num %= n;
}
} //遍历数组,寻找是否还有未报数的人
}
for (int i = 1; i <= n; i++) {
if (v[i] != 0) {
cout << i;
}
} 输出最后一位报数的人
return 0;
}