小游戏game

Description

【题目背景】
yk同学是一个灰常灰常有爱的同学,虽然各种老师总是让他干看似很无聊的事情,但是他总是发明一些好玩的办法来完成这些无聊的任务,这样yk就不会整天那么忧郁啦~ 这次,老师又给他布置了一个任务,让他搬凳子~~ 当然他非常有爱地把这个任务发展成了一个小小小游戏~ hoho,现在他让你来玩这个小游戏,have a try~

【题目描述】
现在有M个凳子排成一个圈,我们顺时针给凳子依次编号为1,2,3……,M。我们从编号为S的凳子开始,每次先顺时针数N个凳子,将第N个凳子搬走,然后再逆时针数K个凳子,将第K个凳子搬走。每次都这样先顺时针数N个,再逆时针数K个,直到只剩1个凳子,直接搬走。最后,我们想知道M个凳子的搬走顺序。

Input

共4行,每行1个数,分别表示题目中的M,S,N,K。

Output

仅一行,凳子搬走的序列,每个编号间有一个空格。

Sample Input

8
1
3
2

Sample Output

3 1 5 2 7 4 6 8

Hint

【数据范围】
100% M<=1000

分析
这就是一道模拟题,bz表示当前的状态(顺时针还是逆时针),t指向当前凳子的编号,s1表示当前状态的数了的第几个凳子。

程序:

var
m,s,n,k,tj:longint;
f:array[0..2000]of boolean;

procedure init;
begin
    readln(m);
    readln(s);
    readln(n);
    readln(k);
    fillchar(f,sizeof(f),true);
    tj:=0;
end;

procedure main;
var
bz,t,s1:longint;
begin
    bz:=1;t:=s-1;s1:=0;
    while tj<m do
    begin
        if bz=1 then
        begin
            inc(t);
            if t>m then t:=1;
            if f[t]=true then inc(s1);
            if s1=n then
            begin
                write(t,' ');
                bz:=2;
                s1:=0;
                f[t]:=false;
                inc(tj);
            end;
        end else
        if bz=2 then
        begin
            dec(t);
            if t<1 then t:=m;
            if f[t]=true then inc(s1);
            if s1=k then
            begin
                write(t,' ');
                bz:=1;
                s1:=0;
                f[t]:=false;
                inc(tj);
            end;
        end;
    end;
end;

begin
    init;
    main;
end.


posted @ 2017-08-07 16:17  银叶草  阅读(130)  评论(0编辑  收藏  举报
Live2D