Re: Интересная задачка
От: UgN  
Дата: 01.11.02 11:49
Оценка: 61 (4)
Здравствуйте IgorK, Вы писали:

IK>Всем привет.


IK>Попалась мне сегодня интересная задачка. Может кому-нибудь тоже понравится .


IK>

IK>Задача.

IK>Дано: массив на N элементов.
IK>Требуется: сдвинуть массив циклически на K позиций вправо.
IK>K и N — любые положительные числа (разумные).

IK>Доп.условия:
IK>1. Дополнительную память не выделять (кроме нескольких временных переменных).
IK>То есть не пропорционально K или N.
IK>2. Рекурсией в глубину K или N не пользоваться.
IK>3. Алгоритм должен обладать сложностью не хуже o(N).

IK>Пример:
IK>Для массива 1 2 3 4 5 6 7 при сдвиге на 3 позиции должно получиться
IK>5 6 7 1 2 3 4.




Принцип такой. 

Дано:

1 2 3 4 5 6 7

Меняем попарно 1 - 4, 2 - 3, 5 - 7

4 3 2 1 7 6 5 

Меняем попарно 4 - 5, 3 - 6, 2 - 7

5 6 7 1 2 3 4

Все.

Легко формализуется. 

Для  K < N

Берешь с конца K + 1 элемент, получаешь 2 части маасива

Разворачиваешь их попарными обменами

Получившийся массив целиком разворачиваешь еще раз.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.