Здравствуйте!!!! Появилась маленькая проблема в решении задачи. Преподаватель мне задал такую задачу: вводится слово, нужно сделать в нем перестановки: первый символ остается первым, второй становится последним, третий символ становится вторым, четвертый символ становится предпоследним и тд. Например: abcdef Result: acefdb abcde acedb Проблема в том, что не понятна зависимость. Плюс преподавателя не будет до конца недели, когда уже надо сдавать. И не очень понятно как писать программу с использованием именно перестановок.
volvo
27.11.2006 21:48
Ну, по условию получается, что если позиция символа (назовем ее P) НЕчетная, то нужно переставить символ в позицию: (P div 2 + 1), а если четная, то в позицию (length(s) - (P div 2)) + 1, так?
setare
27.11.2006 21:55
Цитата(volvo @ 27.11.2006 17:48)
Ну, по условию получается, что если позиция символа (назовем ее P) НЕчетная, то нужно переставить символ в позицию: (P div 2 + 1), а если четная, то в позицию (length(s) - (P div 2)) + 1, так?
Честно говоря, я что-то не очень поняла, как это получится. А если работать через массив данных, а не через строчку? Просто нам сказали вводить эти симолы через массив.
мисс_граффити
27.11.2006 22:13
тогда вместо length(s) поставишь размерность массива
setare
27.11.2006 22:24
А вот, если делать это в цикле, как можно из одного массива (исходного) таким образом перезаписать в другой? Просто присваиванием : например p- размерность: if (i mod 2=0) ch[i+1]=ch2[i]; else ch[(p-i)+1]=ch2[i]; Нужно работать с двумя максимум массивами!
volvo
27.11.2006 22:28
ch_1 - исходный массив, ch_2 - полученный ...
for i := 1to P doif i mod2 <> 0then ch_2[(i div2) + 1] := ch_1[i]
else ch_2[(P - (i div2)) + 1] := ch_1[i];
Больше двух массивов и не нужно
setare
27.11.2006 22:32
Цитата(volvo @ 27.11.2006 18:28)
ch_1 - исходный массив, ch_2 - полученный ...
for i := 1to P doif i mod2 <> 0then ch_2[(i div2) + 1] := ch_1[i]
else ch_2[(P - (i div2)) + 1] := ch_1[i];
Больше двух массивов и не нужно
Огромное Вам спасибо! Сейчас попробую!
setare
30.11.2006 22:13
Всем здравствуйте! Я вот через несколько дней после вашей подсказки подумала, и поняла, что это же все таки не перестановка. Может быть, я конечно ошибаюсь, но честно здесь можно использовать именно алгоритм перестановки или же здесь нет такой зависимости. Я имею ввиду получить этот же результат, но не смотреть на четные и нечетные позиции элементов и копирование их ы другой массив?
мисс_граффити
30.11.2006 22:20
а если смотреть на четность - это уже не перестановка? обойтись одним массивом можно... но зачем? определись, чего ты хочешь...
setare
30.11.2006 22:36
Вообще-то я говорила, что именно мне нужна перестановка. Потому что когда мы проверяем на четность+ копируем элементы в другой массив, это уже не считается перестановкой.
мисс_граффити
30.11.2006 22:38
а если проверяем, но не копируем, а работаем с этим же - перестановка?
setare
30.11.2006 22:45
Как я понимаю, да. Если работать в одном массиве. Просто я лично старалась найти зависимость в этой перестановке, чтобы именно в одном массиве переставлять символы, например: abcdef 1)afcdeb 2)afcedb 3)acfedb 4)acefdb тут будет 4 перестановки. Но как-то повторяемости нет. Мне задалди задание именно написать перестановку, а я как бы просто пишу копирование. Поэтому спрашиваю, может быть, все таки кто-то увидит здесь повторяемость!
Archon
1.12.2006 4:40
Просматриваем массив с конца. Если элементов нечётное число - начинаем с последнего элемента, если чётное - со второго. Алгоритм: символ пропускаешь, следующий переносишь в конец, следующий пропускаешь, следующий переносишь в конец... Это можно считать перестановками?
Archon
1.12.2006 5:06
Вот ещё один алгоритм: то, что подчёркнуто, надо перевернуть (записать наоборот). abcdefgh ahgfedcb acdefghb achgfedb acefghdb acehgfdb Стоит попробовать упростить алгоритм. Буду думать.
Archon
1.12.2006 12: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 Пожалуй лучший способ.
setare
1.12.2006 23:25
Цитата(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 Пожалуй лучший способ.
Здравствуйте! Большое спасибо за последний алгоритм. Это именно перестановка. Буду пробовать это реализовать!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.