Вывести на экран три самых больших числа их этого файла

Помогите, пожалуйста, с заданием: В файле написаны числа. Вывести на экран три самых больших числа их этого файла. Сортировать числа запрещается. Заранее благодарен за помощь!


Ответы (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;
}
→ Ссылка