Program a; var s: array of integer; x,n,p,sum,max,min,i,k,o,m:integer; begin p:=1; sum:=0; m:=-1; o:=-1; max:=-MaxInt; min:=MaxInt; Write('n= '); read(n); setlength(s,n); Writeln('Перечислите значения:'); for x:=0 to n-1 do begin read (s[x]); k:=s[x]; if (k>0) and ((k mod 5) =0) then sum:=sum+k; if ((k mod 10)=0) and (k>max) then begin max:=k; o:=x; end; if ((k mod 2) = 0) and (k<min) then begin min:=k; m:=x; end; end;Writeln('Сумма = ',sum); if (ABS(o-m)=1) or (o=m) or (o=-1) or (m=-1) then write('Диапазон не найден') else begin if (o>m) then for i:=m+1 to o-1 do p:=s[i]*p else for i:=o+1 to m-1 do p:=s[i]*p; writeln('Произведение = ',p); end; 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: array of integer;
x,n,p,sum,max,min,i,k,o,m:integer;
begin
p:=1;
sum:=0;
m:=-1;
o:=-1;
max:=-MaxInt;
min:=MaxInt;
Write('n= ');
read(n);
setlength(s,n);
Writeln('Перечислите значения:');
for x:=0 to n-1 do begin
read (s[x]);
k:=s[x];
if (k>0) and ((k mod 5) =0) then sum:=sum+k;
if ((k mod 10)=0) and (k>max) then begin max:=k; o:=x; end;
if ((k mod 2) = 0) and (k<min) then begin min:=k; m:=x; end;
end;Writeln('Сумма = ',sum);
if (ABS(o-m)=1) or (o=m) or (o=-1) or (m=-1) then write('Диапазон не найден')
else begin
if (o>m) then
for i:=m+1 to o-1 do
p:=s[i]*p
else
for i:=o+1 to m-1 do
p:=s[i]*p;
writeln('Произведение = ',p);
end;
end.
Код на 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
Соответственно, ответ такой:
G B
B C
H A
E A