向量解法
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("monkey.in", "r", stdin);
freopen("monkey.out", "w", stdout);
int n, k;
cin >> n >> k;
vector<int> vec;
for (int i = 1; i <= n; i++) {
vec.push_back(i);
}
int start = 0;
while (!vec.empty()) {
int index = (start + k - 1) % vec.size();
cout << vec[index] << " ";
vec.erase(vec.begin() + index);
if (vec.size() > 0) {
start = index % vec.size();
} else {
start = 0;
}
}
cout << endl;
return 0;
}
数组解法
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6;
bool arr[N];
int n, m, remain, i, check;
signed main() {
freopen("monkey.in", "r", stdin);
freopen("monkey.out", "w", stdout);
cin >> n >> m;
fill(arr + 1, arr + 1 + n, true);
remain = n;
while (remain > 0) {
i++;
if (arr[i]) {
check++;
}
if (check == m) {
arr[i] = false;
cout << i << " ";
remain--;
check = 0;
}
if (i > n) {
i = 0;
}
}
return 0;
}