时间限制: 1000 ms 内存限制: 65536 KB
提交数: 37138 通过数: 20146
【题目描述】
NN个人围成一圈,从第一个人开始报数,数到MM的人出圈;再由下一个人开始报数,数到MM的人出圈;…输出依次出圈的人的编号。
【输入】
输入NN和MM。
【输出】
输出一行,依次出圈的人的编号。
【输入样例】
8 5
【输出样例】
5 2 8 7 1 4 6 3
【提示】
【数据范围】
对于所有数据,2≤N,M≤10002≤N,M≤1000。
【题解】
【队列法】
#include <bits/stdc++.h>
using namespace std;int main() {
queue<int> q;//创建队列
int m, n, c = 0;
cin >> m >> n;
for (int i = 1; i <= m; i++) {
q.push(i);//将i给推进去
}
while (!q.empty()) {//当队列q不为空时,执行以下程序
c++;
if (c != n) {
q.push(q.front());//将队列q的第一个复制一个,然后推到最后一个
q.pop();//将第一个弹出
} else {
cout << q.front() << " ";//输出第一个
q.pop();//弹出第一个
c = 0;
}
}
return 0;
}
【数组法】
#include <bits/stdc++.h>
using namespace std;int main() {
int n, m;
cin >> n >> m;
int a[n + 1] = {0};
int k = n, i = 1, j = 0;
while (k != 0) {
if (a[i] == 0) {
j++;
}if (j == m) {
cout << i << " ";
a[i] = 1;
k--;
j = 0;
}
if (i == n) {
i = 1;
} else {
i++;
}}
return 0;
}