Вывести на экран три самых больших числа их этого файла
Помогите, пожалуйста, с заданием: В файле написаны числа. Вывести на экран три самых больших числа их этого файла. Сортировать числа запрещается. Заранее благодарен за помощь!
Ответы (2 шт):
Автор решения: Takom
→ Ссылка
Алгоритм достаточно прост, попробуйте пройтись по цифрам циклом for три раза, вызывая функцию мах(). Добавьте эти три элемента в новый массив и выведите его.
Автор решения: Maggot
→ Ссылка
Всеж просто заведите std::array max_arr : n - сколько максимумов Вам надо
Далее читайте числа, и сравнивайте его с числами из max_arr в прямом порядке и если оно больше - то переписывайте его предварительно сдвинув числа которые меньше нового найденного максимума.
Далее проверьте прочитали ли вы файл полностью
Вот пример кода:
#include <iostream>
#include <fstream>
#include <iterator>
#include <array>
#include <limits>
#include <algorithm>
int main(void) {
std::string file_name{"data"};
std::ifstream inputFile;
inputFile.open(file_name, std::ios::in);
if (!inputFile.is_open()) {
std::cerr << "File " << file_name << " not open" << std::endl;
return 1;
}
const std::size_t size{5};
int min_value{std::numeric_limits<int>::min()};
std::array<int, size> max_arr{ {min_value, min_value, min_value} };
auto func{[&](int data) {for (std::size_t i{0}; i < size; ++i) {
if (data >= max_arr[i]) {
for (std::size_t j{size - 1}; j > i; --j) {
max_arr[j] = max_arr[j - 1];
}
max_arr[i] = data;
break;
}
}
}
};
int value;
while (inputFile >> value){
func(value);
}
if (!inputFile.eof() || inputFile.bad()) {
std::cerr << "File not full read" << std::endl;
return 2;
}
for (const auto val : max_arr) {
std::cout << val << std::endl;
}
return 0;
}