Informatică, întrebare adresată de KeKeMachu, 8 ani în urmă

Cerința
Se dă o matrice cu m linii şi n coloane, având elementele numere naturale nenule. Aflaţi câte coloane ale matricei au produsul elementelor divizibil cu un număr dat p.

Date de intrare
Fișierul de intrare memory003.in conține pe prima linie numerele m, n şi p, iar pe următoarele m linii câte n numere naturale separate prin spații, reprezentând elementele matricei.

Date de ieșire
Fișierul de ieșire memory003.out va conține pe prima linie numărul de coloane ale matricei pentru care produsul elementelor este divizibil cu p.

Restricții și precizări
1 ≤ m ≤ 1.000
1 ≤ n ≤ 300
1 ≤ p ≤ 1.000.000.000
elementele matricei sunt mai mici sau egale cu 100

Exemplu
memory003.in

2 3 10
4 7 5
25 8 6
memory003.out

2
Explicație
Produsul elementelor pe coloane este 100, 56, respectiv 30. Avem astfel două coloane cu produsul elementelor divizibil cu 10.

Asta este ce am facut eu:

#include

using namespace std;

ifstream f ("memory003.in");
ofstream g ("memory003.out");

short n , m;
int p , x;
int a[305];

int main()
{
short i , j , ans = 0;

f >> n >> m >> p;

fill(a , a + 305 , 1);

for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
f >> x;

a[j] *= x;
}
}

for(j=1;j<=m;j++)
{
if(!(a[j] % p))
++ans;
}

g << ans;

return 0;
}

Nu inteleg de ce nu merge, imi da 20 de puncte si in rest raspuns gresit.

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
2

Răspuns:

Cel mai sigur iti iese din tip(100^1000 = 10^2000, cand int tine pana la 10^9)

Explicație:

#include <bits/stdc++.h>

using namespace std;

ifstream f ("memory003.in");

ofstream g ("memory003.out");

short n , m;

unsigned long long int p , x;//declarat ca tip mai mare

unsigned long long int a[305];//declarat ca tip mai mare

int main()

{

short i , j , ans = 0;

f >> n >> m >> p;

fill(a , a + 305 , 1);

for(i=1;i<=n;i++)

{

for(j=1;j<=m;j++)

{

f >> x;

a[j] = (a[j]*x)%p;//Folosim restul impartirii la p a produsului

}

}

for(j=1;j<=m;j++)

{

if(a[j] == 0)//si verificam daca este 0

++ans;

}

g << ans;

return 0;

}


boiustef: Superb !!!! Fantastic. jos pălăria :))) în semn de respect...
boiustef: Am mai văzut o rezolvare ce respectă indicaţiile, dar asta e Super!
Prenumele tău nu e Vlad ?
CinevaFaraNume: Nu
KeKeMachu: In loc sa ridic la putere eu am imultit, acum am realizat. Eram obosit atunci. Multumesc
KeKeMachu: Nu mi-am dat seama ca iese din cauza asta
boiustef: nu am înţeles de care putere... şi el face înmulţire, dar în vector pune resturile de la împărţire, iar la tine faci produsul pe coloană şi pui în vector şi tipurile se pot supraâncărca. Acum deabea am văzut că domnul Cineva a modificat codul tău şi a extins domeniul de valori a tipurilor de date. Bravo, mi-a plăcut codul
KeKeMachu: Totul a pornit de la faptul ca atunci cand mi-am calculat produsul final pe o coloana maxim, am facut 1000 * 100 in loc de 100 ^ 1000, care evident ca iese. Astfel m-as fi gandit si eu la % p tot timpul si sa vad la final daca e 0. Daca te referi la codul meu, multumesc.
Alte întrebări interesante