Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 12.12.2015
Сообщений: 18
1

Осуществить циклический сдвиг элементов массива влево на k позиций

12.12.2015, 17:01. Просмотров 2550. Ответов 10

Дан массив размера N и число k (0 < k < 5, k < N). Осуществить циклический сдвиг элементов массива влево на k позиций.
Гуглю весь день, так толком ничего и не понял, помогите решить.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2015, 17:01
Ответы с готовыми решениями:

Осуществить сдвиг элементов массива влево на K позиций
Дан массив размера N и целое число K (1 ≤ K &lt; N). Осуществить сдвиг элементов массива влево на K...

Осуществить циклический сдвиг элементов одномерного массива на k позиций
работает правильно только если k=1 если больше то сдвиг делает правильно, но когда на место их...

Осуществить циклический сдвиг элементов массива вправо на k позиций
Решаю задачи на сервере одном, задание было &quot;Дан массив размера N ≥ 2 и число k (0 &lt; k &lt;...

Осуществить циклический сдвиг элементов массива влево1|вправо2 на k позиций
Добрый день ребят, очень нужна Ваша помощь. Помогите решить задачу. Дан массив размера N и число...

10
Эксперт C
25203 / 15683 / 3349
Регистрация: 24.12.2010
Сообщений: 34,162
12.12.2015, 19:25 2
Осуществить циклический сдвиг массива на N элементов

Добавлено через 2 минуты
А задачка хоть и простая, но не совсем тривиальная. И для ее решения нужны некоторые базовые знания из теории чисел...
Впрочем, внизу этой страницы целый список...
0
Dimension
581 / 449 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
12.12.2015, 19:39 3
Цитата Сообщение от Байт Посмотреть сообщение
базовые знания из теории чисел
зачем?можно k раз сдвинуть на один ,либо rotate )
0
Эксперт C
25203 / 15683 / 3349
Регистрация: 24.12.2010
Сообщений: 34,162
12.12.2015, 20:05 4
Цитата Сообщение от Dimension Посмотреть сообщение
можно k раз сдвинуть на один
Честь, сударь, не позволит...
1
2572 / 2188 / 233
Регистрация: 03.07.2012
Сообщений: 7,903
Записей в блоге: 1
15.12.2015, 12:06 5
За 5 мин, без "целодневного" гугления и теории чисел :
C++
1
2
3
4
5
6
void mascopy(int *a, int n, int k) {
    int tmp[4],i;
    for (i=0;i<k;++i)       tmp[i]=a[i];
    for (i=k;i<n;++i)       a[i-k]=a[i];
    for (i=0;i<k;++i)       a[n+i-k]=tmp[i];
}
и что тут сложного?
Можно сделать без массива tmp, сдвигая на 1 позицию. По сложности то же самое.
0
Эксперт C
25203 / 15683 / 3349
Регистрация: 24.12.2010
Сообщений: 34,162
15.12.2015, 12:20 6
zer0mail, Великолепный код! Очень простой. Бредовенький, правда.
C++
1
2
int tmp[4],i;
for (i=0;i<k;++i)  tmp[i]=a[i];
А что происходит при k > 4, не расскажите?
Правда, в условии написано k < 5. Что тоже бред.
Все-таки логично было бы поставить и решить задачу в общем виде.
А при данных ограничениях, да - ей цена - ломанный грош, да и того жалко...

Добавлено через 2 минуты
Обычно у таких задач ставится условие - без дополнительных массивов. Т.к. с дополнительными массивами она тоже стоит недорого.
0
2572 / 2188 / 233
Регистрация: 03.07.2012
Сообщений: 7,903
Записей в блоге: 1
15.12.2015, 12:31 7
Цитата Сообщение от Байт Посмотреть сообщение
Правда, в условии написано k < 5. Что тоже бред
Обижаете, сударь. Бред или нет, но это - условие, в соответствии с которым написан код. Ценность тут равна ценности оценки/зачета.
Без условий и доп массивов:
C++
1
2
3
4
5
6
7
8
void mascopy(int *a, int n, int k) {
    int tmp,i;
    while(--k>=0) {
        tmp=a[0];
        for (i=1;i<n;++i)       a[i-1]=a[i];
        a[n-1]=tmp;
    }
}
0
Эксперт C
25203 / 15683 / 3349
Регистрация: 24.12.2010
Сообщений: 34,162
15.12.2015, 12:37 8
Цитата Сообщение от zer0mail Посмотреть сообщение
Без условий и доп массивов:
Сдвигать k раз весь массив на 1 ? Помилуйте! Тогда надо кричать - "Ах, мама, зачем ты меня программистом родила!?"

Добавлено через 2 минуты
Цитата Сообщение от zer0mail Посмотреть сообщение
Ценность тут равна ценности оценки/зачета.
Так как для меня лично эта ценность = 0, этот топик меня интересует как любопытная задачка, допускающая оптимизацию + возможность побеседовать с интересными людьми
0
2572 / 2188 / 233
Регистрация: 03.07.2012
Сообщений: 7,903
Записей в блоге: 1
15.12.2015, 13:04 9
Цитата Сообщение от Байт Посмотреть сообщение
Так как для меня лично эта ценность = 0
Дык, я не для Вас писал, а для автора темы . Чтобы в следующий раз он не тратил день на гугление, а включал мозг и решал сам подобную задачу

Добавлено через 12 минут
Кстати, насчет "зачем родила". Думаю, при k=3 и n =100 (для примера) мой код отработает быстрее, чем Ваш по приведенной выше ссылке. А вариант с временным массивом тем более. Проверим?
0
Dimension
581 / 449 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
15.12.2015, 13:08 10
даже свой код там нашел ,это я stl видать тогда мало знал ,есть крутая вещь
C++
1
rotate(a,a+k,a+n);
0
2572 / 2188 / 233
Регистрация: 03.07.2012
Сообщений: 7,903
Записей в блоге: 1
15.12.2015, 13:24 11
М-да. Проверить не получается - код не работает. Оказывается, "простой бредовый" код выполняет поставленную задачу, а "оптимизированный навороченный" - нет

Ну, хоть пообщались
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2015, 13:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Осуществить циклический сдвиг элементов массива влево на одну позицию
Помогите, пожалуйста, решить программы на си++, если не решу мне хана, заранее спасибо: Дан массив...

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента.
Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k-...

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k – индекс максимального элемента
Помогите пожалуйста решить эту задачу, Дан массив размера N. Осуществить циклический сдвиг...

Осуществить циклический сдвиг массива вправо на m позиций
Разработать алгоритм и программу. Дан одномерный массив С размерностью 1хn (1&lt;=n&lt;=20). Элементы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.