Форум программистов, компьютерный форум CyberForum.ru

Циклический сдвиг элементов массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Lollipo
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 36
01.10.2010, 14:50     Циклический сдвиг элементов массива #1
26. Напишите программу, которая вводит с клавиатуры непустой массив целых чисел, циклический сдвигает элементы массива вправо на к позиции, и печатает результат. Цикличность означает, что последний элемент массива становится самым первым его элементом.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.10.2010, 15:15     Циклический сдвиг элементов массива #2
Lollipo,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <algorithm>
#include <iostream>
#include <iterator>
#include <functional>
#include <cstddef>
 
void Reverse(int* arr, std::size_t size)
{
  std::reverse(arr, arr + size);
}
 
void ShiftLeft(int* arr, std::size_t size, std::size_t k) {
  k %= size;
  
  Reverse(arr    , k);
  Reverse(arr + k, size - k);
  Reverse(arr    , size);
}
 
void ShiftRight(int* arr, std::size_t size, std::size_t k) {
  k %= size;
  
  ShiftLeft(arr, size, size - k);
}
 
int main() {
        int         arr[] = { 1, 2, 3, 4, 5 };
  const std::size_t size  = sizeof(arr) / sizeof(arr[0]);
  const std::size_t k     = 2;
  
  ShiftRight(arr, size, k);
  
  std::copy(arr, arr + size, std::ostream_iterator<int>(std::cout, " "));
  
  return 0;
}
Результат: http://liveworkspace.org/code/4cf835...f65a62f4762cf0
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
01.10.2010, 15:15     Циклический сдвиг элементов массива #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream.h>
 
int main()
{
const int n = 10;
int a[n],i,j,k,tmp;
 
// Ввод массива
for (i = 0; i < n; i++)
{
    cout<<"Vvedite "<<i<<" element: ";
    cin>>a[i];
}
 
cout<<"Vvedte k: ";
cin>>k;
 
// Перестановка
for(i=0; i<k; i++)
{
    for(j=n-1; j>=0; j--)
    {
        if (j==n-1)
            tmp=a[n-1];
        else
            a[j+1]=a[j];
    }
    a[0]=tmp;
}
 
// Вывод рез-та
cout<<"Result: "<<endl;
for (i = 0; i < n; i++)
{
    cout<<a[i]<<' ';
}
 
cout<<endl;
system("pause");
return 0;
}
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
01.10.2010, 17:30     Циклический сдвиг элементов массива #4
CyBOSSeR зачем же так много функций???

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <algorithm>
#include <iostream>
using namespace std;
 
void Reverse(int * Arr, size_t k)
{
    std::reverse(Arr, Arr + k);
}
 
int main() {
    int Arr[] = {1,2,3,4,5};
    const size_t size = sizeof(Arr) / sizeof(Arr[0]);
     size_t k;
     std::cin >> k;
    k = size - k;
    Reverse(Arr, k);
    Reverse(Arr+k, size - k);
    Reverse(Arr, size);
 
    std::copy(Arr, Arr + size, std::ostream_iterator<int>(std::cout, " "));
 
    system("pause");
}
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
02.10.2010, 08:30     Циклический сдвиг элементов массива #5
NikolaWhite, а зачем вы заменили:
C++
1
k %= size; /*на*/ k = size - k;
В первом случае можно было сделать сдвиг больше, чем размер массива (типа неколько раз погонять массив по кругу
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
02.10.2010, 12:58     Циклический сдвиг элементов массива #6
а зачем вы заменили:
Код C++
C++
1
k %= size; /*на*/ k = size - k;
Я подумал раз k это константа, как ее вообще можно изменять(в частности делением по модулю)?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2010, 13:02     Циклический сдвиг элементов массива
Еще ссылки по теме:

C++ Выполнить циклический сдвиг элементов массива
C++ Циклический сдвиг массива на k элементов
C++ Циклический сдвиг элементов массива

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

Или воспользуйтесь поиском по форуму:
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
02.10.2010, 13:02     Циклический сдвиг элементов массива #7
Почему константа?) Вроде константа здесь только size. Тем более k=size-k - это тоже изменение)
Yandex
Объявления
02.10.2010, 13:02     Циклический сдвиг элементов массива
Ответ Создать тему
Опции темы

Текущее время: 20:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru