问题描述:
有()个人围成一圈,顺序编号。从第1个人开始指数(从1-3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。
求解思路:
int m : 记录退出的人数,while循环内的条件(m < n-1),这样while循环结束就只剩一个
bool vis[n] : 记录1,2,...,n编号的人数是否退圈
int k :记录数数1,2,3
int i : 记录循环读围圈的人的编号
C++代码:
#include<iostream>
#include<vector>
using namespace std;
int main() {
int n, m, k, i;
cin >> n;
vector<bool> vis(n, 0);
m = 0;
i = -1;
k = 0;
while (m < n - 1) {
i++;
if (i > n - 1) {
i = 0;
}
if (vis[i]) continue;
k++;
if (k == 3) {
m++;
k = 0;
vis[i] = 1;
}
}
for (int j = 0; j < vis.size(); j++) {
if (!vis[j])
cout << j + 1 << endl;
}
return 0;
}