Чтобы найти третье наименьшее число в C++, можно использовать несколько методов. Вот некоторые из них:
Метод 1: сортировка
- В качестве входных данных возьмите массив или контейнер чисел.
- Отсортируйте массив или контейнер по возрастанию.
- Обратитесь к элементу по индексу 2 (при условии, что индексация начинается с нуля), чтобы получить третье наименьшее число.
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {5, 2, 9, 1, 7, 3};
std::sort(numbers.begin(), numbers.end());
if (numbers.size() >= 3) {
int thirdSmallest = numbers[2];
std::cout << "Third smallest number: " << thirdSmallest << std::endl;
} else {
std::cout << "Not enough numbers to find the third smallest." << std::endl;
}
return 0;
}
Метод 2: линейный поиск
- В качестве входных данных возьмите массив или контейнер чисел.
- Инициализируйте три переменные:
smallest,SecondSmallestиThirdSmallestс большими значениями. - Перебрать каждый элемент массива или контейнера.
- Сравните каждый элемент с текущими значениями
smallest,SecondSmallestиThirdSmallest, обновив их при необходимости. - После перебора всех элементов значение
ThirdSmallestбудет третьим наименьшим числом.
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {5, 2, 9, 1, 7, 3};
int smallest = INT_MAX;
int secondSmallest = INT_MAX;
int thirdSmallest = INT_MAX;
for (int i = 0; i < numbers.size(); i++) {
if (numbers[i] < smallest) {
thirdSmallest = secondSmallest;
secondSmallest = smallest;
smallest = numbers[i];
} else if (numbers[i] < secondSmallest && numbers[i] != smallest) {
thirdSmallest = secondSmallest;
secondSmallest = numbers[i];
} else if (numbers[i] < thirdSmallest && numbers[i] != smallest && numbers[i] != secondSmallest) {
thirdSmallest = numbers[i];
}
}
if (thirdSmallest != INT_MAX) {
std::cout << "Third smallest number: " << thirdSmallest << std::endl;
} else {
std::cout << "Not enough numbers to find the third smallest." << std::endl;
}
return 0;
}
Метод 3: приоритетная очередь
- В качестве входных данных возьмите массив или контейнер чисел.
- Создайте приоритетную очередь (минимальную кучу) для хранения чисел.
- Пройтись по каждому элементу массива или контейнера и вставить его в приоритетную очередь.
- Извлечь первые два элемента из приоритетной очереди.
- Элемент, остающийся в верхней части приоритетной очереди, будет иметь третий наименьший номер.
#include <iostream>
#include <queue>
#include <vector>
int main() {
std::vector<int> numbers = {5, 2, 9, 1, 7, 3};
std::priority_queue<int, std::vector<int>, std::greater<int>> pq;
for (int num : numbers) {
pq.push(num);
}
if (pq.size() >= 3) {
pq.pop();
pq.pop();
int thirdSmallest = pq.top();
std::cout << "Third smallest number: " << thirdSmallest << std::endl;
} else {
std::cout << "Not enough numbers to find the third smallest." << std::endl;
}
return 0;
}