Informatică, întrebare adresată de rocky2balboa, 9 ani în urmă

Cerinţa
Scrieţi un program care citeşte un tablou bidimensional cu m linii şi n coloane şi un număr k şi determină suma indicilor coloanelor care conţin valoarea k.

Date de intrare
Fişierul de intrare exista.in conţine pe prima linie numerele k, m şi n, iar pe următoarele m linii câte n numere naturale separate prin spaţii, reprezentând elementele tabloului.

Date de ieşire
Fişierul de ieşire exista.out va conţine pe prima linie suma cerută. Dacă nu există în matrice valoarea k, se va afişa mesajul NU EXISTA.

Restricţii şi precizări
2≤m,n≤10;
valoarea lui k şi elementele matricei sunt numere întregi cu cel mult 4 cifre;
liniile sunt numerotate de la 1 la m, iar coloanele de la 1 la n.

Exemplu
exista.in

3 5 4
2 4 5 -8
1 3 7 9
4 -2 3 10
5 4 2 37
6 7 3 13
exista.out

5
Explicaţie
Coloana 2 şi coloana 3 conţin valoarea 3, iar suma lor este 5.

Răspunsuri la întrebare

Răspuns de AntiEaglesDavids
0
#include <fstream>
#include <vector>
#include <numeric>
#include <algorithm>

int main()
{
    std::ifstream fin("exista.in");

    int k, m, n;
    fin >> k >> m >> n;

    std::vector<std::vector<int>> mat(n, std::vector<int>(m, 0));

    for (int i = 0; i < m; ++i)
        for (int j = 0; j < n; ++j)
            fin >> mat[j][i];

    fin.close();
    std::ofstream fout("exista.out");

    fout << std::accumulate(std::begin(mat), std::end(mat), 0,
            [&mat, k] (int init, const std::vector<int> & vec) {
        return init + (std::find(std::begin(vec), std::end(vec), k) != std::end(vec)) * (&vec - &mat[0] + 1);
    });
}


Sau mai bine ia de aici indentat mai bine:
Anexe:
Alte întrebări interesante