Информатика, вопрос задал sonicbobbogemi , 1 год назад

Напишите программу, которая выполняет циклический сдвиг части массива, начиная с элемента с номером K и заканчивая элементом с номером M (включительно), влево на R элементов. Нумерация элементов массива начинается с единицы.

Входные данные
Первая строка содержит размер массива N . Во второй строке через пробел задаются N чисел – элементы массива. Гарантируется, что 0 < N ≤ 10000 . В третьей строке через пробел записаны два числа – K ( 0 < K ≤ N ) и M ( K ≤ M ≤ N ). В четвертой строке записана величина сдвига R ( 0 ≤ R ≤ N ).

Выходные данные
Программа должна вывести в одну строчку все элементы получившегося массива, разделив их пробелами.


sonicbobbogemi: На С++
sonicbobbogemi: и если можно с векторами

Ответы на вопрос

Ответил SHAZAMKID
0

Ответ:

Вот пример программы на C++, решающей данную задачу:

```cpp

#include <iostream>

#include <vector>

int main() {

int N;

std::cin >> N;

std::vector<int> arr(N);

for (int i = 0; i < N; i++) {

std::cin >> arr[i];

}

int K, M;

std::cin >> K >> M;

int R;

std::cin >> R;

// Вычисляем индексы начала и конца части массива для сдвига

int startIdx = K - 1;

int endIdx = M - 1;

// Вычисляем реальное значение сдвига, чтобы не делать лишние итерации

int shift = R % (endIdx - startIdx + 1);

// Производим циклический сдвиг части массива влево на shift элементов

for (int i = 0; i < shift; i++) {

int temp = arr[startIdx];

for (int j = startIdx; j < endIdx; j++) {

arr[j] = arr[j + 1];

}

arr[endIdx] = temp;

}

// Выводим получившийся массив

for (int i = 0; i < N; i++) {

std::cout << arr[i] << " ";

}

std::cout << std::endl;

return 0;

}

```

Программа сначала считывает размер массива `N`, затем считывает `N` элементов массива. Затем считываются значения `K` и `M`, определяющие часть массива, которую необходимо сдвинуть. Затем считывается величина сдвига `R`.

Далее программа вычисляет индексы начала и конца части массива, которую необходимо сдвинуть. Затем производит циклический сдвиг этой части массива влево на `R` элементов.

Наконец, программа выводит получившийся массив на экран.

Новые вопросы