Top.Mail.Ru
Ответы

Как сделать сдвиг в массиве на определённое количество клеток? Язык Си.

Задача:
дан массив

1,2,3,4,5,6,7,8,9,10

сдвиг допустим на три клетки влево

4,5,6,7,8,9,10,1,2,3

сдвиг на три клетки вправо

8,9,10,1,2,3,4,5,6,7

По дате
По рейтингу
Аватар пользователя
Профи
15лет

http://codelab.ru/task/cycle_shift/

/* Сдвигаем массив x[0..n] * на rotdist позиций влево
*/
/* gcd - наибольший общий делитель
* между n и rotdist
*/
for i = 0 to gcd
t = x
j = i
while
k = j + rotdist

if k >= n
k -= n

if k == i
break

x[j] = x[k]
j = k
x[j] = t

на C сами переведёте.
там есть ещё 2 алгоритма.

Если нет ограничений на использование памяти, то заводим новый массив той же длины
и копируем в него старый со смещением. Алгоритм тривиальный.



Видео по теме