Программу надо сформатировать и тогда её структура будет видна лучше. А чтобы понять, как идет выполнение, в нужных точках ставим промежуточную выдачу - это называется "трассировкой".
var s, k: integer; label met; begin s:=-12; k:=90; Writeln('s=',s,', k=',k); s:=s+10; Writeln('s=',s); met: Writeln('Метка met:'); k:=k+10; Write('k=',k); if k<200 then s:=50 else s:=s+k; Writeln(', s=',s); if k<200 then goto met; Writeln('Результат: s=',s) end.
Учитывая, что 8 букв можно переставить примерно 40 тысячами можно просто запустить поиск в ширину, сохранить для всех перестановок то, из какой строчки они получились, и потом восстановить ответ для строчки abcdefgh.
while not to_process.empty(): s, prev = to_process.get() if s in prec: continue for i in range(7): for j in range(i + 1, 8): if i == 0: next_s = s[j::-1] + s[j+1:] else: next_s = s[:i] + s[j:i-1:-1] + s[j+1:] if next_s not in prec: to_process.put((next_s, s)) prec[s] = prev
current = "abcdefgh" print(current) while prec[current] is not None: current = prec[current] print(current)
А чтобы понять, как идет выполнение, в нужных точках ставим промежуточную выдачу - это называется "трассировкой".
var
s, k: integer;
label
met;
begin
s:=-12;
k:=90;
Writeln('s=',s,', k=',k);
s:=s+10;
Writeln('s=',s);
met:
Writeln('Метка met:');
k:=k+10; Write('k=',k);
if k<200 then s:=50 else s:=s+k;
Writeln(', s=',s);
if k<200 then goto met;
Writeln('Результат: s=',s)
end.
Результат выполнения программы:
s=-12, k=90
s=-2
Метка met:
k=100, s=50
Метка met:
k=110, s=50
Метка met:
k=120, s=50
Метка met:
k=130, s=50
Метка met:
k=140, s=50
Метка met:
k=150, s=50
Метка met:
k=160, s=50
Метка met:
k=170, s=50
Метка met:
k=180, s=50
Метка met:
k=190, s=50
Метка met:
k=200, s=250
Результат: s=250
Код на python 3:
from queue import Queue
to_process = Queue()
to_process.put(("edghcbfa", None))
prec = {}
while not to_process.empty():
s, prev = to_process.get()
if s in prec:
continue
for i in range(7):
for j in range(i + 1, 8):
if i == 0:
next_s = s[j::-1] + s[j+1:]
else:
next_s = s[:i] + s[j:i-1:-1] + s[j+1:]
if next_s not in prec:
to_process.put((next_s, s))
prec[s] = prev
current = "abcdefgh"
print(current)
while prec[current] is not None:
current = prec[current]
print(current)
Вывод программы:
abcdefgh
edcbafgh
edcbhgfa
edbchgfa
edghcbfa