|
0 / 0 / 1
Регистрация: 08.12.2012
Сообщений: 32
|
|
Одномерный массив. Циклический сдвиг вправо03.02.2013, 01:46. Показов 19236. Ответов 28
Метки нет (Все метки)
Дан массив A размера N и целое число K (1 ≤ K ≤ 4, K < N). Осущест-
вить циклический сдвиг элементов массива вправо на K позиций (при этом A перейдет в A , A — в A , …, A — в A ). Допускается использовать 1 K+1 2 K+2 N K вспомогательный массив из 4 элементов.
0
|
|
| 03.02.2013, 01:46 | |
|
Ответы с готовыми решениями:
28
Одномерный массив. Циклический сдвиг влево Одномерный массив. Осуществить сдвиг вправо на k позиций |
|
257 / 234 / 185
Регистрация: 02.04.2016
Сообщений: 898
|
|
| 20.07.2016, 13:37 | |
|
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||||||
| 20.07.2016, 22:43 | |||||||
0
|
|||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|
| 21.07.2016, 23:08 | |
|
Прошу прощения у почтенной публики, коленка оказалась дырявой. И нагородил я в коде чуши.
Подождите, пожалуйста, до нормального рабочего рабочего стола и нормального интернета...
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||||||||||
| 26.07.2016, 00:05 | |||||||||||
|
Сразу оговорюсь. Я здесь рассматриваю немного не ту задачу, которая сформулирована в стартовом топике. А именно - циклический сдвиг массива размером n на произвольное число позиций s без использования дополнительных массивов.
Все оказалось не так тривиально в смысле реализации (кода), но идея не сложна, хоть и симпатична. Если размер массива (n) и сдвиг (s) взаимно просты, то задачу решает следующий код. Кликните здесь для просмотра всего текста
Программа запускается из командной строки с параметрами Размер Сдвиг sdvig 36 10 Если же Nd = Nod(n,s) не равен 1, то поступаем следующим образом. Разбиваем исходный массив на Nd подмассивов размером n/Nd. Элементы каждого подмассива отстоят друг от друга на Nd (поэтому и требуется функция Ind). Сдвиг тоже делим на Nd. Теперь каждый из массивов удовлетворяет условию взаимной простоты размера и сдвига, и к ним применяется описанный алгоритм. Кликните здесь для просмотра всего текста
2
|
|||||||||||
| 26.07.2016, 01:49 | |
|
При всем уважении к светлому имени этой задачи - я бы написал функцию/класс-обертку/итератор или как там это называется в выбранном языке реализации, который не будет переписывать память, а просто организует доступ к нужному элементу массива, рассматривая его как кольцевой буфер. Итого - имея один массив любой длины мы сразу получаем все его сдвиги на любое число элементов за О(1) по времени и самое забавное - все они будут лежать в памяти, занимаемой исходным массивом.
3
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
|
|
| 26.07.2016, 07:05 | |
|
_Ivana, идея конечно интересная
![]() но бывают случаи когда нужно сдвигать именно физические данные, например, видеобуфер или данные в файле
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|
| 26.07.2016, 09:54 | |
|
_Ivana, идея вполне светлая. И, ИМХО,код должен получиться короче.
![]() Добавлено через 7 минут Переформулирую. Написать функцию F(A[], n, s, i) дающую i-тый элемент массива A, состоящего из n элементов, после циклического сдвига на s. Сам массив не трогать (считать, что он находится в памяти onle-read)
0
|
|
| 26.07.2016, 18:52 | |||
. Например, у нас есть сишная функция, принимает указатель на начало массива и количество элементов и что-то с ним делает (читает, пишет). Внутри вовсю используется взятие значения указателя и запись значения по указателю плюс арифметика/инкремент/декремент указателя. И таких мест много. Чтож, это печально, но можно пойти двумя путями:1) перед вызовом функции физически передвинуть наш массив 2) перегрузить чтение/запись/смещение указателя (если это возможно в языке реализации) или файн-реплейсом во всей функции заменить эти операции на макросы (или инлайновые функции), которые делают нужное смещение. Во втором случае функция будет более универсальна.
1
|
|||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||||||
| 29.07.2016, 14:00 | |||||||
Как вы предлагаете это сделать? Даже если в вашем распоряжении есть эта замечательная функция F ![]() Добавлено через 24 минуты ЗЫ. Если одна задача встречается в 9 раз реже другой, это еще не повод для игнорирования попыток ее решения.
2
|
|||||||
| 29.07.2016, 14:00 | |
|
Циклический сдвиг вправо Циклический сдвиг массива вправо Реализовать циклический сдвиг вправо Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Хабру пора сливаться, время пришло, оно прийдёт за всеми, но ему давно пора (Хабр - галимый плагиат и кликбейт с саморекламой).
Hrethgir 04.08.2026
Стирают публикации с эффективными алгоритмами (в частности по алгоритму обхода дерева, был опубликован там 3-го мая, в зипапке . . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|