题目描述:
有N个人按顺时针围成一圈,编号从1到N,现在从第一个人沿顺时针从1开始进行报数,报到P的人将会离开,而他顺时针下一个位置的人继续从1开始报数,这样操作到最后,N个人都将会离开。请按顺序输出这N个离开的人的编号。
输入:
两个整数N和P(1≤N,P≤1000)。
输出:
共一行,包含N个整数,两两之间以一个空格分隔,依次表示N个离开的人的编号。
输入样例:
10 3
输出样例:
3 6 9 2 7 1 8 5 10 4
用时/内存:
1000MS/256MB
思路
要离开x个人,我们可以用数组模拟报数过程,就可以了,十分简单。
代码
#include <bits/stdc++.h>
using namespace std;
int n,p,cnt,x=1;
bool out[1001];
int main()
{
cin >> n >> p;
for(int i=1;i<=n;i++)
{
while(true)
{
if (!out[x])
{
cnt++;
if(cnt == p)
{
out[x] = true;
cnt = 0;
cout << x <<" ";
break;
}
}
if(x==n)
{
x=1;
}
else
{
x++;
}
}
}
return 0;
}