Grade 9 · Text filesCitește în română

Counting the values in a file

Original: Numărarea valorilor dintr-un fișier

O(n)C++1746 lines1 exampleuses date.in / date.out

The idea

The file date.in contains a natural number k on the first line, and on the following lines a sequence of natural numbers of unknown length. We read until the end of the file and count how many values there are in total, how many are divisible by k and which one is the largest. The results are written to date.out, on one line.

Original description (Romanian)

Fișierul date.in conține pe prima linie un număr natural k, iar pe următoarele linii un șir de numere naturale de lungime necunoscută. Citim până la sfârșitul fișierului și numărăm câte valori sunt în total, câte sunt divizibile cu k și care este cea mai mare dintre ele. Rezultatele se scriu în date.out, pe un rând.

Complexity
O(n)
Grade
Grade 9 (Clasa a IX-a)
Chapter
Text files

Examples

Example 1

Input (date.in)

3
9 4 12 7
30 5 6

Expected output (date.out)

7 4 30

The code

Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.

numararea-valorilor.cpp
/*
 * Titlu: Numărarea valorilor dintr-un fișier
 * Clasa: 9
 * Capitol: Fișiere text
 * Descriere: Fișierul date.in conține pe prima linie un număr natural k, iar pe
 *            următoarele linii un șir de numere naturale de lungime necunoscută.
 *            Citim până la sfârșitul fișierului și numărăm câte valori sunt în
 *            total, câte sunt divizibile cu k și care este cea mai mare dintre ele.
 *            Rezultatele se scriu în date.out, pe un rând.
 * Complexitate: O(n)
 *
 * Exemplu
 * Intrare:
 * 3
 * 9 4 12 7
 * 30 5 6
 * Ieșire: 7 4 30
 */
#include <fstream>
using namespace std;

int main()
{
    ifstream fin("date.in");
    ofstream fout("date.out");
    long long k, x, maxim = -1;
    int total = 0, divizibile = 0;
    fin >> k;
    while (fin >> x)
    {
        total++;
        if (x % k == 0)
        {
            divizibile++;
        }
        if (x > maxim)
        {
            maxim = x;
        }
    }
    fout << total << ' ' << divizibile << ' ' << maxim << '\n';
    fin.close();
    fout.close();
    return 0;
}

Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.