我想找到移动这些数字1,2,3,4,5的所有可能性,条件是“4,3”是不可能的,1和5不能在同一个解决方案中。我有这个代码但是当我编译它时它没有向我显示任何内容。
var x:array[1..50] of integer;
i,k:integer;
avems,evalid:boolean;
procedure init;
begin
x[k]:=0;
end;
procedure succesor;
begin
if x[k]<5 then avems:=true
else avems:=false;
if avems=true then x[k]:=x[k]+1;
end;
function solutie:boolean;
begin
if k=3 then solutie:=true
else solutie:=false;
end;
procedure valid;
begin
evalid:=true;
for i:=1 to k-1 do
if (x[i]=1) or (x[i]=5) and (x[k]=1) or (x[k]=5) then evalid:=false;
if (k>1) and (x[k-1]=4) and (x[k]=3) then evalid:=false;
end;
procedure tipar;
begin
for i:=1 to 3 do
write(x[i],' ');
writeln;
end;
begin
k:=1;
init;
while k>0 do
begin
repeat
succesor;
until not(avems) or (avems and evalid);
if avems then
if solutie then tipar
else begin
k:=k+1;
init;
end
else k:=k-1;
end;
end.
答案 0 :(得分:1)
你期待什么?您的代码会递增x[1]
直到达到5,然后设置avems:=false;
然后将k
递减到零并退出而循环。
请记住,Pascal 不对像Python这样的块使用缩进,所以你的
更清楚地写出了最后的步骤if avems then begin
if solutie then tipar
else begin
k:=k+1;
init;
end
end
else k:=k-1;
如果这不是你想要的,你必须编写一些begin/end
。