题目描述
n个小朋友手拉手按顺时针方向站成一个圆圈,从某一个小朋友开始报数,报到m的那个小朋友退到圈外,然后他的下一位重新报“1”。这样继续下去,最后只剩下一个小朋友,他原来站在什么位置上呢?
输入
一行: 3个用空格隔开的整数,N 、B和M,分别表示共有N个小朋友,从第B个小朋友开始报数,报到M的小朋友出圈。
输出
一个整数:最后出列的小朋友最开始站在第几个位置上。
样例输入
5 2 3
样例输出
5
提示
开始时第1个小朋友站在第1个位置上,第2个小朋友站在第2个位置上,…,第n个小朋友站在第n个位置上。报数也是按顺时针方向依次报数。
数据规模
对于100%的数据,n<=1000,m,b<=n。
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, b, m;
cin >> n >> b >> m;
int a[n + 1] = {0};
int count = 1, kid = n;
for (int i = b; i <= n; i++) {
if (a[i]) {
if (i == n)i = 0;
continue;
}
if (a[i])continue;
if (kid == 1 && a[i] == 0) {
cout << i;
break;
}
if (count == m) {
a[i] = 1;
count = 0;
kid--;
}
count++;
if (i == n)i = 0;
}
return 0;
}