Здравствуйте!!!!
Появилась маленькая проблема в решении задачи. Преподаватель мне задал такую задачу: вводится слово, нужно сделать в нем перестановки: первый символ остается первым, второй становится последним, третий символ становится вторым, четвертый символ становится предпоследним и тд. Например:
abcdef
Result: acefdb
abcde
acedb
Проблема в том, что не понятна зависимость. Плюс преподавателя не будет до конца недели, когда уже надо сдавать. И не очень понятно как писать программу с использованием именно перестановок.
Ну, по условию получается, что если позиция символа (назовем ее P) НЕчетная, то нужно переставить символ в позицию: (P div 2 + 1), а если четная, то в позицию (length(s) - (P div 2)) + 1, так?
тогда вместо length(s) поставишь размерность массива
А вот, если делать это в цикле, как можно из одного массива (исходного) таким образом перезаписать в другой? Просто присваиванием : например p- размерность:
if (i mod 2=0)
ch[i+1]=ch2[i];
else
ch[(p-i)+1]=ch2[i];
Нужно работать с двумя максимум массивами!
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];
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];
Всем здравствуйте! Я вот через несколько дней после вашей подсказки подумала, и поняла, что это же все таки не перестановка. Может быть, я конечно ошибаюсь, но честно здесь можно использовать именно алгоритм перестановки или же здесь нет такой зависимости. Я имею ввиду получить этот же результат, но не смотреть на четные и нечетные позиции элементов и копирование их ы другой массив?
а если смотреть на четность - это уже не перестановка?
обойтись одним массивом можно... но зачем?
определись, чего ты хочешь...
Вообще-то я говорила, что именно мне нужна перестановка. Потому что когда мы проверяем на четность+ копируем элементы в другой массив, это уже не считается перестановкой.
а если проверяем, но не копируем, а работаем с этим же - перестановка?
Как я понимаю, да. Если работать в одном массиве. Просто я лично старалась найти зависимость в этой перестановке, чтобы именно в одном массиве переставлять символы, например:
abcdef
1)afcdeb
2)afcedb
3)acfedb
4)acefdb
тут будет 4 перестановки. Но как-то повторяемости нет. Мне задалди задание именно написать перестановку, а я как бы просто пишу копирование. Поэтому спрашиваю, может быть, все таки кто-то увидит здесь повторяемость!
Просматриваем массив с конца. Если элементов нечётное число - начинаем с последнего элемента, если чётное - со второго. Алгоритм: символ пропускаешь, следующий переносишь в конец, следующий пропускаешь, следующий переносишь в конец... Это можно считать перестановками?
Вот ещё один алгоритм: то, что подчёркнуто, надо перевернуть (записать наоборот).
abcdefgh
ahgfedcb
acdefghb
achgfedb
acefghdb
acehgfdb
Стоит попробовать упростить алгоритм. Буду думать.
По утру ещё один свежий алгоритм в голову пришёл. Смысл такой: меняем местами соседние буквы в слове, начиная сперва со второй, потом с 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
Пожалуй лучший способ.