Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   помогите решить задачу (http://forum.oszone.net/showthread.php?t=29503)

snikers 25-08-2004 17:01 204223

если кто может помогите найти закономерность....
Есть машинка которая печатает страницы книги но перед тем сгибает  большой лист бумаги такими вариантами:
Сначала она свертывает лист снизу вверх, потом слева направо, потом вновь снизу вверх, и вновь слева направо и т.д.   k- раз. причем верхний правый угол листа остается на месте. тоесть страницы с номером 1 и 2 зафиксированы. Нужно найти алгоритм которы при вводе k  выдает номера страниц в таком порядке: сначала те которые на первой странице слева направо и снизу вверх, а потом на второй старнице так же: слева направо и снизу вверх...k= максимум 10.
и ВОТ пример..
k=1      1,2
k=2      1,4,  2,3
k=3       1,8,4,5, (на 1 стр) 7,2,6,3(на 2 стр)    
k=4       1,8,16,9, 13,12,4,5 -(на 1), 7,2,10,15,11,14,6,3
и т.д.
Пробовал находить через суммы но такая хаотичность расположений что не могу...
Может кто сталкивался так прошу помочь...очень нужно....
По- моему задача не из простых (по крайней мере для меня)Не хотелось бы выпрашивать готовую программу потому что это ничего мне не даст, но если у кого есть что-то похожее сделано так please bereznay@mail.ru . Или здесь.... А нет - так хоть идею...Наперед спасибо....

ivank 25-08-2004 18:32 204224

При таких малых k достаточно просто втупую промоделировать процесс сгибания листа. Или вы не можете?

Добавлено:

Что бы понять как моделировать. Лучше всего взять обычный лист и посмотреть на его примере.

Возьмите лист, сложите его k раз по вашему алгоритму (пусть для определённости k будет чётным). Пронумеруйите страницы. В результате мы, по сути, получили массив размера 1х1х2^k заполненный числами. Теперь разверните лист по вертикали. Получился массив размерности 2х1х2^(k-1). Внимательно посмотрите как он получился из предыдщего (половина элементов осталась прежней и на прежних местах, а вторая довольно просто отразилась). Теперь разверните лист по горизонтали. Получился массив 2х2х2^(k-2). Он тоже легко получается по предыдущему (опять, половина элменетов остаётся на своих местах, а вторая отражается). Вот так ваше программа должна разворачивать лист до тех пор пока не останется массив размерности AxBx2. По нему уже можно построить ряд ответа. Не самый эффективный, но очень простой алгоритм.

Моя интуиция подсказывает мне, что существует более простой рекурсиный алгоритм. Но его довольно таки долго выводить. Так что для малых k проще использовать вышеописанную методу.

Crew 27-08-2004 01:57 204225

snikers

Я не смог понять, как получить те же результаты....
по разному крутил, но так и не понял в каком углу цифра должна стоять


Время: 19:55.

Время: 19:55.
© OSzone.net 2001-