2017.8.7测试 题一 小游戏


小游戏
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.
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值