最后的胜利者
Time Limit:1000MS Memory Limit:65536K
Total Submit:8 Accepted:6
Description
n 个小孩围成一圈做游戏,游戏将决出若干个胜利者。假定一个数 m,从第
1 个小孩起,顺时针数数,每数到第 m 个小孩时,该小孩离开。接着又从
下一个小孩开始数数,数到第 m 个小孩时,该小孩也离开,如此不断反复
进行,最后剩下的 k 个小孩便是胜利者。对于一定的 n、m、k,究竟胜利
者是哪些呢?
Input
输入数据有一些数据组,每组数据含有整数 n、m、k(1≤ n, m, k≤
50)),分别表示小孩数,游戏中每次数数的个数和最后剩下的 k 个胜利
者。
Output
对于每组数据,按从小到大的顺序输出一列获胜小孩的位置。每组获胜序
列之间应回车。
Sample Input
10 3 3 10 4 3 5 2 2 2 1 1
Sample Output
4 5 10 1 5 6 3 5 2
Source
ahstu@ICPC02
#include<iostream> #include<algorithm> using namespace std; main() { int a[2000],M,N,k,x; while(cin>>M>>N>>k) { x=1; for(int i=1;i<=M;i++) //数组赋初值,初值即为其编号 { a[i]=i; } while(M) { if(M==k) { sort(a,a+M); for(int i=1;i<=M;i++) {cout<<a[i]; if(i!=M)cout<<" "; } cout<<endl; break; } if((N%M+x-1)%M==0) {x=M;} else {x=(N%M+x-1)%M;} for(int j=x;j<M;j++) {a[j]=a[j+1];} M--; } } }
转载请注明出处,谢谢.Q_Q