您的位置:首页 > 其它

【AKOJ】1021-最后的胜利者

2016-05-10 12:35 357 查看
最后的胜利者
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--;
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: