Напишите программу, которая выполняет циклический сдвиг части массива, начиная с элемента с номером K и заканчивая элементом с номером M (включительно), влево на R элементов. Нумерация элементов массива начинается с единицы.
Входные данные
Первая строка содержит размер массива N . Во второй строке через пробел задаются N чисел – элементы массива. Гарантируется, что 0 < N ≤ 10000 . В третьей строке через пробел записаны два числа – K ( 0 < K ≤ N ) и M ( K ≤ M ≤ N ). В четвертой строке записана величина сдвига R ( 0 ≤ R ≤ N ).
Выходные данные
Программа должна вывести в одну строчку все элементы получившегося массива, разделив их пробелами.
Answers & Comments
Ответ:
Вот пример программы на 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` элементов.
Наконец, программа выводит получившийся массив на экран.