主题:[讨论]九连环
abcwuhang
[专家分:1840] 发布于 2006-11-04 15:01:00
九连环:
共有九个环,每个环有两种状态: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个回复)
沙发
angwuy [专家分:2280] 发布于 2006-11-04 16:12:00
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.
板凳
abcwuhang [专家分:1840] 发布于 2006-11-04 21:16:00
试过但不行!!
3 楼
abcwuhang [专家分:1840] 发布于 2006-11-04 21:17:00
我认为还是那个gcode可能有问题~~~~不太确认~~~
4 楼
Benix [专家分:720] 发布于 2006-11-05 00:15:00
递推
《算法艺术》31页有道一样的题
5 楼
angwuy [专家分:2280] 发布于 2006-11-05 08:39:00
楼主是不是广州的?
我来回复