В целочисленном векторе vector(n) найти его вторые по значению минимальный и максимальный элементы и поменять их местами - C (СИ)
Формулировка задачи:
Задание 1
В целочисленном векторе vector(n) найти его вторые по значению минимальный и максимальный элементы и поменять их местами. Предусмотреть случай, когда таких элементов нет.
Входные данные:
n=10
v_min=-5
v_max=10
Исходный вектор:
7 -5 1 3 -2 5 2 0 10 1
Выходные данные:
min_2=-2 n_min_2=5
max_2=7 n_max_2=1
Выходной вектор:
-2 -5 1 3 7 5 2 0 10 1
Решение задачи: «В целочисленном векторе vector(n) найти его вторые по значению минимальный и максимальный элементы и поменять их местами»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #define N 10 void swap(int& n1, int& n2) { int _tn = n1; n1 = n2; n2 = _tn; } int main() { int A[N] = { 3, 5, 7, 1, 2, 4, 6, 9, 8, 5 }; for (int i = 0; i < N; i++) printf("%d ",A[i]); printf("\n"); int n = 2, last_min = 0, last_max = 0; while (--n >= 0) { int min = 0, max = 0; for (int t = 0; t < N; t++) { min = ((A[t] < A[min]) && ((A[t] != A[last_min]) || (n >= 1))) ? t : min; max = ((A[t] > A[max]) && ((A[t] != A[last_max]) || (n >= 1))) ? t : max; } last_min = min; last_max = max; } swap(A[last_min],A[last_max]); for (int r = 0; r < N; r++) printf("%d ",A[r]); printf("\n"); _getch(); return 0; }
Объяснение кода листинга программы
В этом коде ищется вторые по значению минимальный и максимальный элементы в векторе, затем они меняются местами. Вот список действий:
- Объявляются массив и функция
int A[N] = {3, 5, 7, 1, 2, 4, 6, 9, 8, 5};
- инициализация массиваvoid swap(int& n1, int& n2);
- объявление функции для обмена элементов
- Вывод начального содержимого массива
for (int i = 0; i < N; i++) printf(
%d,A[i]); printf(
\n);
- цикл вывода элементов массива
- Начальные итерации цикла поиска вторых по значению минимального и максимального элементов
int n = 2, last_min = 0, last_max = 0;
- инициализация переменныхwhile (--n >= 0)
- цикл прохода по всем элементам, начиная со второго
- Поиск вторых по значению минимального и максимального элементов
int min = 0, max = 0;
- инициализация переменныхfor (int t = 0; t < N; t++)
- цикл прохода по всем элементам массиваmin = ((A[t] < A[min]) && ((A[t] != A[last_min]) || (n >= 1))) ? t : min;
- поиск второго по значению минимального элементаmax = ((A[t] > A[max]) && ((A[t] != A[last_max]) || (n >= 1))) ? t : max;
- поиск второго по значению максимального элемента
- Обновление последних найденных минимального и максимального элементов
last_min = min;
- обновление значенияlast_min
last_max = max;
- обновление значенияlast_max
- Обмен найденных минимального и максимального элементов
swap(A[last_min],A[last_max]);
- вызов функции для обмена элементов
- Вывод измененного содержимого массива
for (int r = 0; r < N; r++) printf(
%d,A[r]); printf(
\n);
- цикл вывода элементов массива
- Завершение работы программы
_getch();
- получение ввода от пользователя (не используется в данном коде)return 0;
- завершение работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д