题目描述:
有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个人,我们可以用数组模拟报数过程,就可以了,十分简单。
代码
#includeusing 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; }



