![]() |
![]() |
sheka |
![]()
Сообщение
#1
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Нужно в массиве 2n элементов поменять последовательность элементов на
а1аn+1a2an+2...ana2n Препод говорил, что с помощью одной переменной этого сделать нельзя. (доп массив из n элементов - не интересно). Вот что получилось (один запоминается, а на его место ставится, но уже на свое место другой): Curr := 2; но работает только для некоторых, и процент работающих с ростом n уменьшается. Для неработающих: должен где-то быть вызов буфера, но этого я не делал, т.к. для этого, по моей фантазии надо как минимум еще один булевый 2n-2 массив, что еще хуже дополнительного массива. Неужели он был прав? Сообщение отредактировано: sheka - 1.11.2010 20:04 |
![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Неужели он был прав? Грубо говоря, правило такое: либо ты тратишь память, либо время. Ничего невозможного нет, если только не рассчитывать на то, чтобы сделать за один проход (то есть за O(n), как уже заметил TarasBer). Короче, вот тебе вполне рабочая реализация:for i:=1 to n do begin Как опять же верно заметил Тарас, можно было бы обойтись и без буфера (ессно, снова за счет некоторого замедления), примерно так: for i:=1 to n do for j:=n+i-1 downto 2*i do begin 2 Unconnected: если будешь (собершенно случайно)) читать этот тред, попробуй связать его с Поменять местом с помощью цикла. . Может, тебе удастся, наконец, понять, что я от тебя хотел там.. ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:56 |