Задание 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++. Просьба, нейросеть не использовать.
C/C++
Рекурс.функцию, которая принимает 2х-мерный массив целых чисел и кол-во сдвигов и выполняет круговой сдвиг массива влево
void rol(int **arr, int rows, int cols, int shifts) {
if (shifts
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);
}
Функция принимает указатель на двумерный массив целых чисел, количество строк и столбцов в массиве и количество сдвигов, которое нужно выполнить. Она использует рекурсию для последовательного выполнения сдвигов влево на один элемент и выходит из рекурсии, когда все сдвиги выполнены.
В функции мы сначала сохраняем первый элемент в каждой строке, чтобы восстановить его в конце массива после сдвига. Затем мы сдвигаем остальные элементы в каждой строке влево на один элемент и восстанавливаем первые элементы в конце массива. Для этого мы используем остаток от деления индекса строки на общее количество строк в массиве, чтобы циклически переходить от последней строки к первой.
Надеюсь, это поможет вам выполнить третье задание. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их!
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);
}
Функция принимает указатель на двумерный массив целых чисел, количество строк и столбцов в массиве и количество сдвигов, которое нужно выполнить. Она использует рекурсию для последовательного выполнения сдвигов влево на один элемент и выходит из рекурсии, когда все сдвиги выполнены.
В функции мы сначала сохраняем первый элемент в каждой строке, чтобы восстановить его в конце массива после сдвига. Затем мы сдвигаем остальные элементы в каждой строке влево на один элемент и восстанавливаем первые элементы в конце массива. Для этого мы используем остаток от деления индекса строки на общее количество строк в массиве, чтобы циклически переходить от последней строки к первой.
Надеюсь, это поможет вам выполнить третье задание. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их!
Мейiржан ********
А ведь автор вопроса просил нейросеть не использовать.
Похожие вопросы
- Написать РЕКУРСИВНУЮ функцию, которая принимает двухмерный массив целых чисел и выполняет круговой сдвиг массива ВЛЕВО.
- Напишите рекурсивную функцию, которая принимает двухмерный массив целых чисел и количество сдвигов и выполняет
- В LINUX OS Написать программу, которая из командной строки получает целое число N и некоторый текст “Text”.
- Помогите пожалуйста с Массивами .В языке С .Заполнил 2-мерный массив N и M случайными числами дальше не понимаю.
- С++ Составить функцию, которая меняет местами пары соседних элементов в массиве
- Написал функцию, которая добавляет элемент в конец массива, как можно улучшить? Нули не учитываются.
- Найти произведение элементов массива а, состоящего из 25 целых чисел, кратных 2 на Паскаль
- Задан одномерный массив целых чисел создать код на C++
- Почему динамический массив напрямую в функцию передать нельзя, а динамический массив указателей можно?
- Создать функцию, которая возводит число в степень.Запрещено использовать функцию возведения в степень.
LNK2019 invoke_main
LNK 1120 1 unresolved externals