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

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

Решение с использованием указателей:
#include <iostream>
#include <ctime>
#define N 15
int main()
{
int A[N];
int i, tmp, cnt;
int *min = A,*max = A, *j;
setlocale(LC_ALL, "Russian");
// Автозаполнение
srand(time(0));
for (i = 0; i < N; i++)
A[i] = rand() % 201 - 100;
std::cout << "Исходный массив:" << std::endl;
for (i = 0; i < N; i++)
std::cout << *(A + i) << " ";
// Находим минимальный и максимальный элементы массива, запоминаем их адреса
for (i = 0; i < N; i++)
{
if (*(A + i) > *max) max = A + i;
if (*(A + i) < *min) min = A + i;
}
// Мин. и макс. элементы могут находиться в разных местах относительно друг друга
if (min < max)
{
cnt = ((max) - (min)) / 2;
for (j = min + 1, i = 0; i < cnt; j++, i++)
{
tmp = *j;
*j = *(min + 1 + (max - 1 - j));
*(min + 1 + (max - 1 - j)) = tmp;
}
}
else
{
cnt = ((min) - (max)) / 2;
for (j = max + 1, i = 0; i < cnt; j++, i++)
{
tmp = *j;
*j = *(max + 1 + (min - 1 - j));
*(max + 1 + (min - 1 - j)) = tmp;
}
}
std::cout << "\nРезультат:" << std::endl;
for (i = 0; i < N; i++)
std::cout << *(A + i) << " ";
return 0;
}



Для перестановки элементов массива, расположенных между его минимальным и максимальным элементами, необходимо выполнить следующие шаги:
- Найти индексы минимального и максимального элементов массива.
- Поменять местами элементы, начиная с индекса минимального + 1 и заканчивая индексом максимального - 1, пока индексы не пересекутся.
Ниже приведен пример кода на языке C++, который реализует указанные шаги:
cpp#include <iostream>
#include <algorithm>
void reverseBetweenMinMax(int* arr, int N) {
if (N <= 2) {
return; // Массив слишком маленький, нет элементов между минимальным и максимальным
}
// Найдем индексы минимального и максимального элементов
int minIndex = 0;
int maxIndex = 0;
for (int i = 1; i < N; ++i) {
if (arr[i] < arr[minIndex]) {
minIndex = i;
}
if (arr[i] > arr[maxIndex]) {
maxIndex = i;
}
}
// Если минимальный и максимальный элементы находятся рядом, просто вернемся
if (std::abs(minIndex - maxIndex) == 1) {
return;
}
// Поменяем местами элементы, начиная с индекса минимального + 1 и заканчивая индексом максимального - 1
int left = std::min(minIndex, maxIndex) + 1;
int right = std::max(minIndex, maxIndex) - 1;
while (left < right) {
std::swap(arr[left], arr[right]);
++left;
--right;
}
}
int main() {
const int N = 6;
int arr[N] = {3, 8, 1, 6, 2, 5};
reverseBetweenMinMax(arr, N);
// Выводим результат
for (int i = 0; i < N; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
Этот код найдет минимальный и максимальный элементы в массиве, а затем переставит элементы между ними в обратном порядке. Результатом выполнения приведенного примера будет:
3 2 6 1 8 5
Элементы, расположенные между минимальным элементом 1 и максимальным элементом 8, были переставлены в обратном порядке.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili