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

26.
Scrieţi un program C/C++ care citeşte de la tastatură un număr natural
n (1<=n<=6) şi elementele unui tablou bidimensional A cu n linii şi n
coloane, care memorează numere naturale mai mici decât 100, şi
afişează pe ecran (dacă există), separate prin câte un spaţiu,
elementele din matrice care au proprietatea că sunt egale cu produsul
celorlalte elemente aflate pe aceeaşi coloană.
Exemplu: pentru matricea din figura alăturată se afişează, nu neapărat în
această ordine, valorile 10 22.(10=1*5*2*1 ; 22=1*11*2*1)

1-1-5-10-2
6-11-1-1-4
6-2-5-5-3
1-22-12-2-10
16-1-7-1-8

(am pus "-"intre cifre pentru a delimita cifrele cu 2 zecimale de cele cu o zecimala )

Răspunsuri la întrebare

Răspuns de antonii
1
int table[100][100];

int main(){
   //aici a fost deja intializata matricea
  int prod=1;

  for(int i=0;i<n;i++){ //randul
      for(int j=0;j<n;j++){ //coloana
          //X(i,j) va fi un nuimar din matrice
          //Acum verificam daca e egal cu produsl nr. de pe coloana
          prod=1; //reset

          for(int z=0;z<n;z++) if(z!=i) prod*=table[z][j];
          if(table[i][j]==prod) cout<<table[i][j]<<" ";
      }
  }
}
Răspuns de blindseeker90
2
O alta solutie ar fi sa faci produsul tuturor elementelor de pe aceeasi coloana si apoi sa verifici daca acel produs impartit la un numar de pe coloana produce acelasi numar
De exemplu, daca avem elementele de pe coloana 2: 1,11,2,22,1 atunci produsul lor este 1*11*2*22*1=484. Apoi, verifici daca exista un element n astfel incat n=484/n. Atunci, inseamna ca restul ;elementelor sunt egale cu acel numar n. Observam ca n=22 indeplineste aceasta conditie.
Metoda aceasta e mai eficienta ca timp decat cea a lui Antonii pentru ca nu mai faci n-1 produse pe coloana, ci doar un produs, al tuturor elementelor. Este mai ineficienta ca memorie, pentru ca ai nevoie de un vector separat pentru a memora produsele fiecarei coloane.

#include <iostream>
using namespace std;

int main(){
int n,i,j,a[100][100],produse_coloane[6];
cout<<"Introduceti dimensiunea matricei:";
cin>>n;
cout<<"Introduceti matricea:\n";
for(i=0;i<n;i++){
produse_coloane[i]=1;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
cin>>a[i][j];
produse_coloane[j]=produse_coloane[j]*a[i][j];
}

}

cout<<"Rezultat: ";
for(j=0;j<n;j++){
for(i=0;i<n;i++){
if(a[i][j]==(produse_coloane[j]/a[i][j])){
cout<<a[i][j]<<" ";
}
}
}
return 0;
}

andriesboss92: De ce ai pus:
andriesboss92: produse_coloane[i]=1;
andriesboss92: A, da.. si de ce ai folosit intr-un loc produse_coloane[ i ] si dupa produse_coloane[ j ] ?
blindseeker90: i sau j este un indicator al unui element din vector. Nu conteaza cum notezi indicele, poti sa-l notezi si k daca vrei.
andriesboss92: Aha, ok, mersi mult :)
Alte întrebări interesante