最后的胜利者
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--;
}
}
}