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
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 :)
#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.
Alte întrebări interesante
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Religie,
9 ani în urmă
Matematică,
9 ani în urmă