C/C++

Рекурс.функцию, которая принимает 2х-мерный массив целых чисел и кол-во сдвигов и выполняет круговой сдвиг массива влево

Задание 3
Напишите рекурсивную функцию, которая принимает двухмерный массив целых чисел и количество сдвигов и выполняет круговой сдвиг массива влево.
Например
Дан массив:
4 5 6 7
1 2 4 1
4 5 6 9
Сдвигаем на два влево:
6 7 4 5
4 1 1 2
6 9 4 5


Надо ещё 3 задание сделать, помогите пожалуйста написать работающий код на C++. Просьба, нейросеть не использовать.
Manas Babaliev
Manas Babaliev
67
 void rol(int **arr, int rows, int cols, int shifts) {
if (shifts
Мейiржан ********
Мейiржан ********
58 218
Лучший ответ
Manas Babaliev Я правильно написал, но у меня выскочили 2 ошибки это
LNK2019 invoke_main
LNK 1120 1 unresolved externals
void shiftLeft(int** arr, int rows, int cols, int shifts) {
if (shifts == 0) {
return; // базовый случай
}
// сохраняем первый элемент в каждой строке
int* firstElements = new int[rows];
for (int i = 0; i < rows; i++) {
firstElements[i] = arr[i][0];
}
// сдвигаем остальные элементы влево
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols - 1; j++) {
arr[i][j] = arr[i][j + 1];
}
}
// восстанавливаем первые элементы в каждой строке в конце массива
for (int i = 0; i < rows; i++) {
arr[i][cols - 1] = firstElements[(i + 1) % rows];
}
delete[] firstElements;
// рекурсивный вызов для оставшихся сдвигов
shiftLeft(arr, rows, cols, shifts - 1);
}
Функция принимает указатель на двумерный массив целых чисел, количество строк и столбцов в массиве и количество сдвигов, которое нужно выполнить. Она использует рекурсию для последовательного выполнения сдвигов влево на один элемент и выходит из рекурсии, когда все сдвиги выполнены.

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

Надеюсь, это поможет вам выполнить третье задание. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их!
Олег Турчанин
Олег Турчанин
4 780
Мейiржан ******** А ведь автор вопроса просил нейросеть не использовать.

Похожие вопросы