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

Se consideră tabloul bidimensional cu m linii şi n coloane, care conţine doar valorile {0,1,2}.
Să se determine numerele de ordine ale coloanelor pentru care produsul elementelor este maxim.
Fişierul de intrare prodmax.in conţine pe prima linie numerele m şi n, iar pe următoarele m linii câte n numere naturale separate prin spaţii, reprezentând elementele tabloului.
Fişierul de ieşire prodmax.out va conţine pe prima linie numerele cerute, separate prin spatii, în ordine crescătoare.

Restricţii şi precizări
2≤m,n≤100
numere de ordine ale liniilor sunt între 1 şi m
numere de ordine ale coloanelor sunt între 1 şi n

prodmax.in
4 4
2 1 1 0
1 1 1 1
2 2 2 1
1 2 1 1

prodmax.out
1 2


artur99: pai e usor :D stochezi intr-un vector valorile produselor fiecarei coloane, si in acelasi timp stochezi intr-o variabila si maximul
artur99: apoi verifici in vector care pozitii au valoarea din variabila max
annbleeditout: ma asteptam sa fie mai greu. Multumesc mult de tot :)
artur99: npc ;)

Răspunsuri la întrebare

Răspuns de AntiEaglesDavids
1
#include <fstream>
#include <vector>
using namespace std;
ofstream fout("prodmax.out");
ifstream fin("prodmax.in");
const int NMAX = 10000;

int n, m;
vector<int> indici;
vector<vector<int>> v(NMAX);

int main()
{
    fin >> n >> m;

    v.resize(n);
    for(int i=0; i<n; i++)
        v[i].resize(m);

    for(int i=0; i<v.size(); i++)
        for(int j=0; j<v[i].size(); j++)
            fin >> v[i][j];

    for(int i=0, new_idx = 0, prod=1, x=0; i<m; i++, prod = 1) {
        for(int j=0; j<n; j++) prod *= v[j][i];
        if(prod > x) {
            x = prod;
            indici.erase(indici.begin(), indici.end());
            indici.push_back(i+1);
        }
        else if(prod == x)
            indici.push_back(i+1);
        else
            continue;
    }

    for(auto x : indici) fout << x << ' ';
    return 0;
}

Alte întrebări interesante