Предмет: Информатика, автор: oganes70

Как заменить все максимальные элементы на минимальные в вектор (использовать только алгоритмы стандартной библиотеки шаблонов):
На С++.


csharp: Не очень понятна фраза "все макисмальные элементы". Из массива, например:
1 2 3 4 5 6 7 9 9 заменить последние две девятки на 1?
oganes70: Да

Ответы

Автор ответа: csharp
1

Первым делом нужно выяснить общность вопроса.

Нам нужно заменить максимальные элементы (максимальные элементы - это одинаковые элементы с максимальным значением в векторе) минимальным.

Как наиболее проще это сделать?

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

Итак, мы отсортировали вектор, максимальные элементы вначале, а минимальный - в конце. Описываем цикл:

  • for (int i = 0, temp = arr[i]; i < arr.size(); ++i)

Здесь стоит пояснить: i - итератор, это понятно, temp же - целочисленная переменная, с начала цикла хранящая элемент вектора под индексом 0: arr[0], то есть максимальный элемент.

Внутри цикла мы проверяем, является ли i-й элемент максимальным, то есть, по сути, проходим все максимальные элементы с самого начала:

  1. if (arr[i] == temp)
  2. {
  3.    arr[i] = arr[arr.size() - 1];
  4. }

Здесь arr[arr.size() - 1] - всегда минимальный элемент.

Рассмотрим на примере

Вектор после ввода 7 элементов: -1, 0, 8, -1, 8, 6, 4.

После сортировки: 8, 8, 6, 4, 0, -1, -1

Начало цикла:

i = 0: temp = arr[i] = arr[0] = 8

arr[0] == temp? ⇒ 8 == 8? true ⇒ arr[0] = arr[7 - 1] = -1

i = 1: temp = 8

arr[1] == temp? ⇒ 8 == 8? true ⇒ arr[1] = arr[7 - 1] = -1

i = 2: temp = 8

arr[2] == temp? ⇒ 6 == 8? false ⇒ выход из цикла

Вектор в конце: -1 -1 6 4 0 -1 -1

Код на языке C++

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. int main()
  5. {
  6.    int arrLength = 0;
  7.    std::vector<int> arr;
  8.    std::cout << "Input array length: ";
  9.    do
  10.    {
  11.        std::cin >> arrLength;
  12.        if (arrLength <= 0)
  13.        {
  14.            std::cout << "Error: vector size must be natural!" << std::endl;
  15.        }
  16.    } while (arrLength <= 0);
  17.    for (int i = 0, inputValue = 0; i < arrLength; ++i)
  18.    {
  19.        std::cout << "Input element: ";
  20.        std::cin >> inputValue;
  21.        arr.push_back(inputValue);
  22.    }
  23.    std::sort(arr.rbegin(), arr.rend());
  24.    std::cout << "Array before: ";
  25.    for (int i = 0; i < arr.size(); ++i)
  26.    {
  27.        std::cout << arr[i] << " ";
  28.    }
  29.    for (int i = 0, temp = arr[i]; i < arr.size(); ++i)
  30.    {
  31.        if (arr[i] == temp)
  32.        {
  33.            arr[i] = arr[arr.size() - 1];
  34.        }
  35.        else break;
  36.    }
  37.    std::cout << "\nArray after: ";
  38.    for (int i = 0; i < arr.size(); ++i)
  39.    {
  40.        std::cout << arr[i] << " ";
  41.    }
  42.    return 0;
  43. }
Похожие вопросы
Предмет: Математика, автор: talaibekabdulaev