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

Cerinţa
Se dă o matrice cu n linii şi m coloane şi elemente numere naturale. Să se determine cea mai mare valoare care apare în matrice de cel puțin două ori. Date de intrare Programul citește de la tastatură numerele n şi m, iar apoi n*m numere naturale, separate prin spaţii, reprezentând elementele matricei, linie cu linie. Date de ieşire Programul afișează pe ecran cea mai mare valoare care apare în matrice de cel puțin două ori.
Restricţii şi precizări
1 ≤ m,n ≤ 100 elementele matricei vor fi mai mici decât 1.000.000 dacă în matrice nu se repeta nici o valoare se va afișa IMPOSIBIL
Exemplu

Date de intrare
4 6 4 70 15 23 38 9
1 8 23 23 14 18
17 15 13 38 12 15
3 18 8 23 12 5
Date de ieșire 38

Răspunsuri la întrebare

Răspuns de stassahul
5
Defapt nici nu iti trebuie matrici aici, poti sa faci un vector de lungime n+m, in care vei pune toate elementele, dupa care sortezi vectorul descrescator (comanda "sort(vector,vector+n+m,greater<int>())", din libraria <algorithm>), dupa care te uiti daca vector[pozitie]=vector[pozitie+1], atunci scrii vector[pozitie] si returnezi 0. Daca iti trebuie un algoritm rapid folosestel pe acesta care ti lam descris, daca un algoritm care totusi sa includa matrici foloseste pe acesta:


#include <iostream>

using namespace std;

int a[101][101],n,m,i,j,Min,Max,p,s;


int main()
{

    cin >> n >> m;

    Min=1000001;
    Max=-1000001;

    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            {
                cin >> a[i][j];
                if(a[i][j]>Max) Max=a[i][j];
                else if(a[i][j]<Min) Min=a[i][j];
            }

    for(int k=Max;k>=Min;k--)
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
            {

                if(k==a[i][j])
                {

                    if(p!=k) s=0;
                    s++;
                    if(k==p and s==2)
                    {
                        cout << k;
                        return 0;
                    }
                    p=k;
                }
            }

    cout << "IMPOSIBIL";

    return 0;

}

Arata putin spus urit, dar e de 100 pcte :)

stassahul: Totusi de ceva iti sugerez algoritmul descris, caci chiar daca n=10000 si m=10000, timpul va tinde spre 0, pe cind algoritmul cu matrici va avea dificultati.
CiortescuMihai7: Multumesc tare mult! :)
Alte întrebări interesante