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

Se considera un tablou bidimensional patratic cu n linii. sa se determine  toate elementele ce reprezinta puncte 'șa'(element minim pe linie si maxim pe coloana pe care este situat)

DAU COROANA!!!!!!!!!!!!

Răspunsuri la întrebare

Răspuns de blindseeker90
2
#include <iostream>
#include <fstream>
#include <climits>
#include <string>
using namespace std;

//functie pentru a verifica daca element dat
//este maximum pe coloana
//functia are 4 argumente: matricea,dimensiunea matricei,pozitia testata
//si numarul coloanei
int este_maxim_coloana(int a[100][100],int dim,int poz,int col){
int i;
for(i=0;i<dim;i++){
//daca indicele este egal cu pozitia, sari peste pozitie
if(i==poz){
continue;
}
//daca exista cel putin un element mai mare decat cel de pe pozitie
//atunci nu poate fi maxim
if(a[i][col]>a[poz][col]){
return 0;
}
}
return 1;
}

int main(){

ifstream fim("matrice.in");
int i,j,n,a[100][100];
int pozitii_min[10],nr_pozitii_min,min;
fim>>n;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
fim>>a[i][j];
}
}
//ne apucam sa gasim valoarea minima pentru fiecare linie,
//determinam pozitiile minime, si apoi verificam daca sunt si maxime
//pe coloana
for(i=0;i<n;i++){
min=INT_MAX;
nr_pozitii_min=0;
for(j=0;j<n;j++){
//daca este mai mic decat minim
if(a[i][j]<min){
//minimul devine acea valoare
min=a[i][j];
//lungimea de pozitii de minim resetata la 1
nr_pozitii_min=1;
//prima valaore resetata la pozitia actuala
pozitii_min[0]=j;

}
//daca sunt egale, adauga la vectorul de pozitii
else if(a[i][j]==min){
pozitii_min[nr_pozitii_min]=j;
nr_pozitii_min++;
}
}
for(j=0;j<nr_pozitii_min;j++){
if(este_maxim_coloana(a,n,i,pozitii_min[j])==1){
cout<<"Element sa pe pozitiile: "<<i+1<<" "<<pozitii_min[j]+1<<" este "<<a[i][pozitii_min[j]]<<endl;
}
}
}
return 0;
}

WEREW0LF: mersi =))))))))
WEREW0LF: poti, te rog ,sa o rezolvi intr-un mod mai simplu( la nivel de clasa a 9-a)
blindseeker90: Am facut-o cat de simplu am putut. Am folosit foruri si o matrice, de care ai nevoie pentru reprezentarea datelor din enunt. Functia pur si simplu returneaza 1 sau 0 in functie daca este maximul sau nu. Din pacate cu cat structurile sunt mai simple, cu atat logica(partea de algoritm) este mai complexa. Se poate rezolva si in 5 linii de cod dar ar fi mult prea dezvoltat pentru clasa a 9a
WEREW0LF: mersi =))))
Alte întrebări interesante