非常简洁的写法,我们只需要维护某个人的下一个报数人即可
#include <cstdio>
const int N = 301;
int n, m, sum;
int nxt[N];
int main(){
scanf("%d%d", &n, &m);
if (m == 1){printf("%d\n", n); return 0;}
for (int i = 1; i <= n; ++i)
nxt[i] = i + 1;
nxt[n] = 1;
int index = 1, cnt = 1;
while (sum != n - 1){
if (cnt++ == m - 1){
++sum;
cnt = 1;
nxt[index] = nxt[nxt[index]];
}
index = nxt[index];
}
printf("%d\n", index);
return 0;
}