![]() |
![]() |
sheka |
![]()
Сообщение
#1
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Нужно в массиве 2n элементов поменять последовательность элементов на
а1аn+1a2an+2...ana2n Препод говорил, что с помощью одной переменной этого сделать нельзя. (доп массив из n элементов - не интересно). Вот что получилось (один запоминается, а на его место ставится, но уже на свое место другой): Curr := 2; но работает только для некоторых, и процент работающих с ростом n уменьшается. Для неработающих: должен где-то быть вызов буфера, но этого я не делал, т.к. для этого, по моей фантазии надо как минимум еще один булевый 2n-2 массив, что еще хуже дополнительного массива. Неужели он был прав? Сообщение отредактировано: sheka - 1.11.2010 20:04 |
![]() ![]() |
TarasBer |
![]()
Сообщение
#2
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
1. Берём x
2. Берём y = 2x mod (2n-1) 3. Меняем местами элементы x и y 4. Переходим к 1. Проблема только в условиях начала и выхода из цикла. Для 12 элементов картинка такая, видно, что надо провести один циклический обмен по специальной траектории. ![]() Для другого n циклов может быть больше. Суммарная длина циклов равна n-2 в любом случае. Главное в общем виде понять, как выглядит каждая траектория (это уже я понял), и откуда начинается. Заканчивать циклический обмен надо тогда, когда y становится равным x_start. Откуда начинать, вот в чём вопрос. Вот мы сделали один цикл, от единицы, при помощи счётчика мы даже можем установить, что мы прошли не все элементы. Каков номер следующего нетронутого элемента? -------------------- |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Главное в общем виде понять, как выглядит каждая траектория (это уже я понял), и откуда начинается. Именно. Подобный "пустяк" может оказаться принципиальным и пустить все "разумное, доброе, вечное" под откос )). TarasBer, мне будет очень интересно посмотреть на реализацию.. I believe in you!! Заканчивать циклический обмен надо тогда, когда y становится равным x_start. Откуда начинать, вот в чём вопрос. Вот мы сделали один цикл, от единицы, при помощи счётчика мы даже можем установить, что мы прошли не все элементы. Каков номер следующего нетронутого элемента? ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:59 |