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

Buna,am facut problema aceasta,imi da in codeblocks si pe pbinfo imi da doar 20 puncte. De ce?
Problema;
Se consideră un tablou bidimensional cu n linii şi n coloane ce conţine numere naturale cu cel mult două cifre fiecare.

Cerinţa
Să se determine ultima cifră a produsului elementelor de pe diagonala secundară cu proprietatea că sunt minime pe coloanele lor.

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

Date de ieşire
Fişierul de ieşire mincols1.out va conţine pe prima linie un singur număr, reprezentând valoarea cerută.

Restricţii şi precizări
2 ≤ n ≤ 30
dacă în matrice nu există asemenea elemente, se va afișa mesajul NU EXISTA
Cod:
#include
using namespace std;
ifstream fin("mincols1.in");
ofstream fout("mincols1.out");
int n,i,j,a[33][33],minim,p=1,ok;
int main()
{


fin >> n;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
fin >> a[i][j];
for(i=1; i<=n; i++)
{
minim=a[i][1];
for(j=1; j<=n; j++)
if((a[i][j] {
minim=a[i][j];
p=p*a[i][j];


}



}

fout << p%10;

return 0;
}

Răspunsuri la întrebare

Răspuns de Razzvy
7
Tu trebuia sa calculezi minimul de pe fiecare coloana, mai intai, si apoi sa verifici daca se afla pe diagonala secundara (conditie determinata de formula
 i + j = n + 1).
In primul rand, tu ai calculat minimul de pe fiecare linie, nu coloana. Ca sa faci asta, puteai sa inversezi cele 2 functii for, astfel aveai for(j = 1...) {for(i = 1...)} .
 A doua metoda era sa accesezi elementele matricei cu a[j][i], nu a[i][j].

In al doilea rand, tu ai facut inmultirea ("p=p*a[i][j]") atunci cand ai gasit un nou minim, dar trebuia s-o faci de-abea dupa ce calculai minimul si verificai daca sa afla pe diagonala pincipala.

Codul:
#include <fstream>
using namespace std;

ifstream fin("mincols1.in");
ofstream fout("mincols1.out");

int n, i, j, a[33][33], minim, p = 1, ok;

int main()
{
   fin>>n;
   for(i = 1; i <= n; i++)
     for(j = 1; j <= n; j++)
         fin>>a[i][j];

  for(i = 1; i <= n; i++)
  {
     minim = a[1][i]; //primul element de pe COLOANA
     for(j = 1; j <= n; j++)
       if(a[j][i] < minim) //aici am pus a[j][i] in loc de a[i][j]
           minim = a[j][i];
    
     if(minim == a[n - i + 1][i])  //Verificam daca minimul este cel de pe diagonala                                                   //secundara; Din formula i + j = n + 1
                                                 // l-am aflat pe j = n - i +  1
           p = (p * minim) % 10; //De-abea acum facem inmultirea
     }
  fout<<p;
}
    

diacriss2001: Multumesc
Razzvy: Cu placere!
diacriss2001: Sa inteleg ca ai inversat putin si a[1][i] e la fel cu a[i][1]?
Razzvy: Nu e chiar acelasi lucru. a[i][1] este primul element de pe fiecare linie, pe cand a[1][i] este primul element de pe fiecare coloana
Alte întrebări interesante