【题目描述】
N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M
的人出圈;…输出依次出圈的人的编号。【输入】
输入N和M。
【输出】
输出一行,依次出圈的人的编号。
【输入样例】
8 5
【输出样例】
5 2 8 7 1 4 6 3
【提示】
【数据范围】
对于所有数据,2≤N,M≤1000。
【题解代码】
#include<iostream>
using namespace std;const int N = 5e3 + 10;
int nums[N];
int num = 0;int main()
{int n, m;cin >> n >> m;int peo = n; //表示没出圈的人数for (int i = 1; i <= n; i++) //下表为1表示没出圈{nums[i] = 1;}while (peo > 0){for (int i = 1; i <= n; i++){if (nums[i] == 1) //当前这个人没出圈{if (peo == 1) //只剩1个人了{cout << i;return 0;}num++; //报数if (num == m) //报到m的人出圈{nums[i] = 0; //该人出圈cout << i << ' '; //将该人的编号输出num = 0; //重新计数peo--; //没出圈的人减少1个}}}}return 0;
}