Помощь - Поиск - Пользователи - Календарь
Полная версия: Перестановки в слове
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
setare
Здравствуйте!!!!
Появилась маленькая проблема в решении задачи. Преподаватель мне задал такую задачу: вводится слово, нужно сделать в нем перестановки: первый символ остается первым, второй становится последним, третий символ становится вторым, четвертый символ становится предпоследним и тд. Например:
abcdef
Result: acefdb
abcde
acedb
Проблема в том, что не понятна зависимость. Плюс преподавателя не будет до конца недели, когда уже надо сдавать. И не очень понятно как писать программу с использованием именно перестановок.
volvo
Ну, по условию получается, что если позиция символа (назовем ее P) НЕчетная, то нужно переставить символ в позицию: (P div 2 + 1), а если четная, то в позицию (length(s) - (P div 2)) + 1, так?
setare
Цитата(volvo @ 27.11.2006 17:48) *

Ну, по условию получается, что если позиция символа (назовем ее P) НЕчетная, то нужно переставить символ в позицию: (P div 2 + 1), а если четная, то в позицию (length(s) - (P div 2)) + 1, так?

Честно говоря, я что-то не очень поняла, как это получится. А если работать через массив данных, а не через строчку? Просто нам сказали вводить эти симолы через массив.
мисс_граффити
тогда вместо length(s) поставишь размерность массива
setare
А вот, если делать это в цикле, как можно из одного массива (исходного) таким образом перезаписать в другой? Просто присваиванием : например p- размерность:
if (i mod 2=0)
ch[i+1]=ch2[i];
else
ch[(p-i)+1]=ch2[i];
Нужно работать с двумя максимум массивами!
volvo
ch_1 - исходный массив, ch_2 - полученный ...
for i := 1 to P do
if i mod 2 <> 0 then ch_2[(i div 2) + 1] := ch_1[i]
else ch_2[(P - (i div 2)) + 1] := ch_1[i];
Больше двух массивов и не нужно smile.gif
setare
Цитата(volvo @ 27.11.2006 18:28) *

ch_1 - исходный массив, ch_2 - полученный ...
for i := 1 to P do
if i mod 2 <> 0 then ch_2[(i div 2) + 1] := ch_1[i]
else ch_2[(P - (i div 2)) + 1] := ch_1[i];
Больше двух массивов и не нужно smile.gif

Огромное Вам спасибо! Сейчас попробую! smile.gif
setare
Всем здравствуйте! Я вот через несколько дней после вашей подсказки подумала, и поняла, что это же все таки не перестановка. Может быть, я конечно ошибаюсь, но честно здесь можно использовать именно алгоритм перестановки или же здесь нет такой зависимости. Я имею ввиду получить этот же результат, но не смотреть на четные и нечетные позиции элементов и копирование их ы другой массив?
мисс_граффити
blink.gif
а если смотреть на четность - это уже не перестановка?
обойтись одним массивом можно... но зачем?
определись, чего ты хочешь...
setare
Вообще-то я говорила, что именно мне нужна перестановка. Потому что когда мы проверяем на четность+ копируем элементы в другой массив, это уже не считается перестановкой.
мисс_граффити
а если проверяем, но не копируем, а работаем с этим же - перестановка?
setare
Как я понимаю, да. smile.gif Если работать в одном массиве. Просто я лично старалась найти зависимость в этой перестановке, чтобы именно в одном массиве переставлять символы, например:
abcdef
1)afcdeb
2)afcedb
3)acfedb
4)acefdb
тут будет 4 перестановки. Но как-то повторяемости нет. Мне задалди задание именно написать перестановку, а я как бы просто пишу копирование. rolleyes.gif Поэтому спрашиваю, может быть, все таки кто-то увидит здесь повторяемость! smile.gif
Archon
Просматриваем массив с конца. Если элементов нечётное число - начинаем с последнего элемента, если чётное - со второго. Алгоритм: символ пропускаешь, следующий переносишь в конец, следующий пропускаешь, следующий переносишь в конец... Это можно считать перестановками?
Archon
Вот ещё один алгоритм: то, что подчёркнуто, надо перевернуть (записать наоборот).
abcdefgh
ahgfedcb
acdefghb
achgfedb
acefghdb
acehgfdb
Стоит попробовать упростить алгоритм. Буду думать.
Archon
По утру ещё один свежий алгоритм в голову пришёл. Смысл такой: меняем местами соседние буквы в слове, начиная сперва со второй, потом с 3-ей, с 4-ой и тд. Вот так (дефис - меняем местами):
a b-c d-e f-g h
a c b-e d-g f-h
a c e b-g d-h f
a c e g b-h d-f
a c e g h b-f d
a c e g h f b-d
a c e g h f d b
Пожалуй лучший способ.
setare
Цитата(Archon @ 1.12.2006 8:50) *

По утру ещё один свежий алгоритм в голову пришёл. Смысл такой: меняем местами соседние буквы в слове, начиная сперва со второй, потом с 3-ей, с 4-ой и тд. Вот так (дефис - меняем местами):
a b-c d-e f-g h
a c b-e d-g f-h
a c e b-g d-h f
a c e g b-h d-f
a c e g h b-f d
a c e g h f b-d
a c e g h f d b
Пожалуй лучший способ.

Здравствуйте! Большое спасибо за последний алгоритм. Это именно перестановка. smile.gif Буду пробовать это реализовать!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.