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

Ce este gresit la rezolvarea mea?
Am de rezolvat problema 666 de pe pbinfo si enuntul este:
Se dă o matrice cu n linii și m coloane și elemente numere naturale. Să se determine câte dintre elementele situate pe linii cu indici pari sunt prime.
Date de intrare:
4 3
5 12 10
3 9 1
7 10 1
10 9 3
Date de iesire: 2
Rezolvarea mea:
#include

using namespace std;

int main()
{
unsigned int n,m,i,j,a[100][100],cnt=0,d,ok=0;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
{
if(i%2==0){
for(j=1;j<=m;j++)
{
for(d=2;d<=a[i][j]/2;d++)
{
if(a[i][j]%d==0)
ok=1;
}
if(ok==0)
cnt++;
}
}

}
cout< return 0;
}
Cand rulez imi da 1. Ce e gresit?

Răspunsuri la întrebare

Răspuns de andreidamian604
1

Răspuns:

Salut! Ai câteva greșeli în cod

1. la declarare matricea trebuie sa fie cu 101 elemente pentru că ai inceput de la 1. - a[101][101]

2. când parcurgi liniile e suficient sa începi de la 2 și să crești i cu 2. nu e obligatoriu în această problema, dar e util să știi cum să faci programul mai rapid

3.algoritmul pentru verificarea primalitatii nu pare corect

uite aici pe scurt

daca e numărul e 0 sau 1 ok primește 0, adică numărul nu este prin

daca numărul este 2 sau 3 numărul este prim, deci ok = 1

și apoi ai for ( int d = 2; d * d <= a[i][j]; d++)

daca gasesti divizor ok primește 0

( celălalta varianta e sa mergi până la radical din numar, nu până la număr / 2)

4. ok trebuie sa aibă valoarea 0 de fiecare dată când se parcurge linia.

for ...

for ...

ok = 0;

și după verifici daca e prim, etc

succes


corinaruxandra34: Multumesc mult pt ajutor
Alte întrebări interesante