回 帖 发 新 帖 刷新版面

主题:[讨论]九连环

九连环:
共有九个环,每个环有两种状态:0和1.0代表不在杆上,1代表在杆上.现在九连环是由111111111变成000000000.变化规则是:
(1)第一环无论何时都能自由上下;
(2)第二环只有在第一环为1时,才能自由上下;
(3)想要第n只环的状态,需先使第1到n-2环均为0,第n-1环为1.
每变换一只环,记为一步.
问题:输入一个数,求此时到这一步的状态.(注意:如果输入步数大于实际变换所需步数,则输出-1)
样例输入:2
样例输出:010111111
样例输入2:500
样例输出:-1

回复列表 (共5个回复)

沙发


program jiulianhuan;
var ring:array[1..10]of 0..1;
    input,output:text;
    n,step,temp:integer;
procedure gcode;
var i:integer;
begin
     for i:=1 to 9 do
     if ring[i+1]=1 then
        if ring[i]=1 then ring[i]:=0;
end;
begin
     fillchar(ring,sizeof(ring),0);
     readln(input,n);
     if n>341 then write(output,'-1')
     else
     begin
          step:=341-n;
          temp:=0;
          while step>0 do
          begin
               inc(temp);
               ring[temp]:=step mod 2;
               step:=step div 2;
          end;
          gcode;
          for temp:=1 to 9 do write(output,ring[temp]);
     end;

end.


板凳

试过但不行!!

3 楼

我认为还是那个gcode可能有问题~~~~不太确认~~~

4 楼

递推 
《算法艺术》31页有道一样的题

5 楼

楼主是不是广州的?

我来回复

您尚未登录,请登录后再回复。点此登录或注册