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
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]<<" ";
}
}
}
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
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;
}
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:
Alte întrebări interesante
Fizică,
8 ani în urmă
Limba română,
8 ani în urmă
Chimie,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă