小游戏
game
【题目背景】
yk同学是一个灰常灰常有爱的同学,虽然各种老师总是让他干看似很无聊的事情,但是他总是发明一些好玩的办法来完成这些无聊的任务,这样yk就不会整天那么忧郁啦~ 这次,老师又给他布置了一个任务,让他搬凳子~~ 当然他非常有爱地把这个任务发展成了一个小小小游戏~ hoho,现在他让你来玩这个小游戏,have a try~
【题目描述】
现在有M个凳子排成一个圈,我们顺时针给凳子依次编号为1,2,3……,M。我们从编号为S的凳子开始,每次先顺时针数N个凳子,将第N个凳子搬走,然后再逆时针数K个凳子,将第K个凳子搬走。每次都这样先顺时针数N个,再逆时针数K个,直到只剩1个凳子,直接搬走。最后,我们想知道M个凳子的搬走顺序。
【输入格式】
game.in
共4行,每行1个数,分别表示题目中的M,S,N,K。
【输出格式】
game.out
仅一行,凳子搬走的序列,每个编号间有一个空格。
【样例】
game.in
8
1
3
2
game.out
3 1 5 2 7 4 6 8
【数据范围】
100% M<=1000
var
a:array[0..1000]of boolean;
m,s,n,k,j,x,y:longint;
i:boolean;
begin
read(m,s,n,k);
x:=m;
j:=s;
a[0]:=true;
while x>0 do//搬到搬完为止
begin
if not(i) then begin
i:=true;//变成逆时针
while y<>n do
begin
if j>m then j:=j-m;//如果超过了数据范围就要回去
if not(a[j])then
begin
inc(y);//数凳子
if y=n then break;
end;
inc(j);//往后面走(不等于数凳子!搬走的凳子不算了)
end;
a[j]:=true;
end
else begin
i:=false;
while y<>k do
begin
if j=0 then j:=j+m;
if not(a[j]) then
begin
inc(y);
if y=k then break;
end;
dec(j);
end;
a[j]:=true;
end;
dec(x);
if x>0 then write(j,' ')
else write(j);
y:=0;
end;
end.