Вопрос задан 13.07.2023 в 07:09. Предмет Информатика. Спрашивает Ivanova Kamila.

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

расположенные между его минимальным и максимальным элементами.
0 0
Перейти к ответам

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Бондаренко Михайло.

Решение с использованием указателей:

#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;

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для перестановки элементов массива, расположенных между его минимальным и максимальным элементами, необходимо выполнить следующие шаги:

  1. Найти индексы минимального и максимального элементов массива.
  2. Поменять местами элементы, начиная с индекса минимального + 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, были переставлены в обратном порядке.

0 0

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

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос