Можно ли не сортируя массив найти, например, второй максимальный элемент массива, или пятый, или десятый? То есть N-ный.
Например, в массиве 9 2 3 4 6, третим максимальным элементом будет 4.
А как написать программу, чтобы пользователь вводил число N и получал ответ?
C/C++
C++ как найти N-ый максимальный элемент масива?
#include <iostream>
#include <iomanip>
#include <random>
using namespace std;
struct Box {
int a, b, c;
Box() : a(0), b(0), c(0) {}
void insert(int x) {
if (x > a) {
swap(b, c);
swap(a, b);
a = x;
} else if (x > b) {
swap(b, c);
b = x;
} else if (x > c) {
c = x;
}
}
};
int main() {
const auto m = 10;
const auto n = 15;
int arr[n];
uniform_int_distribution<> uid(m, m + n);
mt19937 gen{ random_device()() };
for (auto& x : arr) x = uid(gen);
for (auto x : arr) cout << setw(4) << x;
puts("\n");
Box box;
for (auto x : arr) box.insert(x);
auto [first, second, tird] = box;
system("chcp 1251 > nul");
cout
<< "Первый: " << first << '\n'
<< "Второй: " << second << '\n'
<< "Третий: " << tird << '\n';
system("pause > nul");
}
#include <iomanip>
#include <random>
using namespace std;
struct Box {
int a, b, c;
Box() : a(0), b(0), c(0) {}
void insert(int x) {
if (x > a) {
swap(b, c);
swap(a, b);
a = x;
} else if (x > b) {
swap(b, c);
b = x;
} else if (x > c) {
c = x;
}
}
};
int main() {
const auto m = 10;
const auto n = 15;
int arr[n];
uniform_int_distribution<> uid(m, m + n);
mt19937 gen{ random_device()() };
for (auto& x : arr) x = uid(gen);
for (auto x : arr) cout << setw(4) << x;
puts("\n");
Box box;
for (auto x : arr) box.insert(x);
auto [first, second, tird] = box;
system("chcp 1251 > nul");
cout
<< "Первый: " << first << '\n'
<< "Второй: " << second << '\n'
<< "Третий: " << tird << '\n';
system("pause > nul");
}
Можно. Но быстрыми методами сортировки это делается быстрее. И проще, так они уже обычно имеются готовые в стандартных библиотеках..
Ищешь максимальный элемент.
Затем тот, с котором будет минимальной разность у максимального, но чтобы он был меньше максимального. Это второй.
Затем тот, с которым будет минимальная разность у второго, но чтобы он был меньше второго. Это третий.
Поиск минимальной разности делается по тому же принципу как и поиск максимального или минимального элемента.
Затем тот, с котором будет минимальной разность у максимального, но чтобы он был меньше максимального. Это второй.
Затем тот, с которым будет минимальная разность у второго, но чтобы он был меньше второго. Это третий.
Поиск минимальной разности делается по тому же принципу как и поиск максимального или минимального элемента.
Евгений Давыдкин
То есть, здесь должно быть N + 1 циклов?
Похожие вопросы
- Заполнить двумерный массив 5*3 и найти строку с максимальным произведением элементов. C++
- Составьте программу удаления столбца, содержащего максимальный элемент матрицы A[N][N] НА ЯЗЫКЕ СИ
- Найти максимальный элементы в строке матрицы
- Заменить нулями элементы массива, которые расположены между первым минимальным и последним максимальным элементами масси
- Найти максимальный элемент в квадратной матрице и сказать под главной диагональю он находится или нет
- Найти 10 максимальных элементов в матрице
- Си. Подсчитать количество появлений максимального элемента матрицы
- Найдите сумму номеров минимального и максимального элементов
- С++ Найти максимальный элемент массива. Не принимает задачу.
- В файле дана двухмерная матрица, сформировать одномерный массив длинной N из чётных элементов квадратной матрицы
Можно ли с вами как-нибудь связаться для консультации, пожалуйста?
Это не просьба о решении каких-то задач. Просто нужен совет что и как изучать.
Я смогу оплатить вашу помощь.