Учитывая, что 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)
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger('Количество строк в матрице:'); var m:=ReadInteger('Количество столбцов в матрице:'); Writeln('Вводите элементы матрицы построчно'); var a:=new real[n,m]; var b:=new real[n]; for var i:=0 to n-1 do begin b[i]:=0; for var j:=0 to m-1 do begin Read(a[i,j]); b[i]+=Sqr(a[i,j]) end; b[i]:=Sqrt(b[i]) end; Writeln('Сформированный вектор'); b.Println; end.
Пример Количество строк в матрице: 4 Количество столбцов в матрице: 3 Вводите элементы матрицы построчно 3.4 5.1 8 -1 0 1 -5.34 1.777 5 3 4 5 Сформированный вектор 10.0781942827076 1.4142135623731 7.52816903370268 7.07106781186548
Эммм. Открываешь Pascal ABC и делаешь фигуры