(1 2 3 4 ... n ) и ( 1 2 3 4 ... n ) (x1 x2 x3 x4 ...xn) И (y1 y2 y3 y4 ...yn)
требуеть написать прогамму которая выведет последовательность транспозиций вида
Код
(j,j+1) (ij,ij+1)
такую, что если первую подстановку умножить на эту последовательность получиться вторая подстановка
klem4
15.01.2007 20:14
Пример есть ?
Reflex
15.01.2007 20:29
например (3 2 1) ( 1 3 2) вывод (1 3 2) (2 1 3)
грубо говоря какие две соседние цифры в упорядоченном множестве нужно поменять
и последовательность пар номеров соседних цифр, последовательная замена которы друг на друга приводит ко второму упорядоченному множеству
klem4
15.01.2007 20:30
Так стоп. Нам нужно найти последотельность _перестановок_ для первой последовательности такую, чтобы из нее получилась вторая последовательность или что ? Я не пойму, причем тут умножение ?
Reflex
15.01.2007 20:49
объясняю подругому забей на все что было раньше есть два массива элементов теперь надо вывести такую последовательность пар соседних индексов массива, чтесли к первому массиву провести последовательно операцию"ы" для каждой пары чисел. arr - наш массив операция ы (a,b : integer) var tmp : integer; begin tmp:=arr[a]; arr[a]:=arr[b]; arr[b]:=tmp; end;
пример входных данных (2 3 1 4) (1 3 2 4 Выходные данные : (1 2) (2 3) (1 2) этот пример показан на картинке
Malice
15.01.2007 20:58
Тебе нужно сделать обычный пузырек с выводом промежуточных результатов (откуда/куда), только сортировку делать не по значению в массиве, а по его индексу в результирующем. Объясним я похлеще тебя
На пальцах: было (1,2,3,4,5) -надо (3,4,2,1,5) Индексируем первый массив (добавлением еще одного или с использованием record- не важно): значения 1,2,3,4,5 Индексы 4,3,1,2,5 Теперь обычный пузырек если индекс[i]<индекс[i+1] то выводим результат и меняем местами индексы и значения.
Reflex
15.01.2007 21:58
помогите кодом, я не понимаю что делать если вход 1 2 5 и 1 2 3 , тоесть как быстро определить можно ли это сделать и как сделать то что сказал малис
Malice
15.01.2007 22:03
Вот набросок для примера:
const n=4; type tt=record x,ind:byte; end; const x:array [1..n] of byte=(2,3,1,4); {было} y:array [1..n] of byte=(1,3,2,4); {стало} var z:array [1..n] of tt; i,j,k:integer; l:tt; begin for i:=1 to n do for j:=1 to n do if x[i]=y[j] then begin z[i].x:=x[i]; z[i].ind:=j; end; {Индексируем} for k:=1 to n do for i:=1 to n-1 do if z[i].ind> z[i+1].ind then begin write ('(',i,',',i+1,') '); l:=z[i]; z[i]:=z[i+1]; z[i+1]:=l; end; end.
Проверку на возможность перестановки не делал, считается, что ты его не обманул. Но проверка нужна, ее проще всего добавить в цикл индексирования массива.
Reflex
15.01.2007 22:21
слушай а в такой индексации будет глюк при таком вводе 1 2 2 3 4 и 1 2 3 2 4
Malice
15.01.2007 23:01
Цитата(Reflex @ 15.01.2007 18:21)
слушай а в такой индексации будет глюк при таком вводе 1 2 2 3 4 и 1 2 3 2 4
Согласен, будет. Поправь, для этого достаточно вычеркивания числа из массива Y числа в момент совпадения при индексировании.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.