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

Se dă o matrice cu n linii și m coloane nr. naturale. Se cere :
a) câte elemente prime sunt pe conturul matricii.
b) afișați elementele din matrice care sunt precedate de un număr prim​

Răspunsuri la întrebare

Răspuns de biancasandovici17
1

#include <iostream>

using namespace std;

int i, j, a[102][102], n, m, prim, nr, d;

int main()

{

 cin>>n>>m;

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

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

     cin>>a[i][j];

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

   {

     if(a[1][j]==1 or a[1][j]==0)

        prim=0;

     else prim=1;

     for(d=2; d*d<=a[1][j]; d++)

       if(a[1][j]%d==0)

         prim=0;

     if(prim==1)

       nr++;

   }

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

   {

     if(a[n][j]==1 or a[n][j]==0)

        prim=0;

     else prim=1;

     for(d=2; d*d<=a[n][j]; d++)

       if(a[n][j]%d==0)

         prim=0;

     if(prim==1)

       nr++;

   }

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

   {

     if(a[i][1]==1 or a[i][1]==0)

        prim=0;

     else prim=1;

     for(d=2; d*d<=a[i][1]; d++)

       if(a[i][1]%d==0)

         prim=0;

     if(prim==1)

       nr++;

   }

 for(i=n-1; i>=2; i--)

   {

     if(a[i][n]==1 or a[i][n]==0)

        prim=0;

     else prim=1;

     for(d=2; d*d<=a[i][n]; d++)

       if(a[i][n]%d==0)

         prim=0;

     if(prim==1)

       nr++;

   }

 cout<<nr<<endl;

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

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

     {

       if(a[i][j-1]==1 or a[i][j-1]==0)

       prim=0;

       else prim=1;

       for(d=2; d*d<=a[i][j-1]; d++)

         if(a[i][j-1]%d==0)

           prim=0;

       if(prim==1)

         cout<<a[i][j]<<' ';

     }

   return 0;

}

Algoritmul este testat, dar nu stiu sigur daca este valabil in toate cazurile.   Sunt multe instructiuni si risc de a gresi. Banuiesc ca poate fi facut intr-o forma mai simpla, dar am ales sa-l scriu pe bucati ca sa fiu mai sigura. Sper ca te-am ajutat si ca programul functioneaza corect.


biancasandovici17: In prima parte a problemei, sunt patru de for. Fiecare ii corespunde in parte unei laturi a matricei. In aceste instructiuni, am aplicat un algoritm elementar de numere prime, iar daca am gasit un numar prim aflat pe respectiva latura, il numaram cu ajutorul contorului
biancasandovici17: Observi ca mergand pe linii, de la al 3-lea for, am început cu i=2. Asta pentru ca deja testasem numărul de pe linia 1, nu mai trebuie testat si a doua oara, pentru ca in cazul in care era prim, se numara de 2 ori
biancasandovici17: La fel s-a intamplat si la al 4-lea for
biancasandovici17: Am testat numerele care nu au fost implicate in celelalte laturi
CosminBarosanu: multumesc mult!
biancasandovici17: iar, in a doua parte a problemei
biancasandovici17: am pornit de la a doua coloana, pentru ca primul element de pe fiecare linie nu are un numar precedent
biancasandovici17: iar in interior am verificat daca numarul de dinainte este prim
biancasandovici17: urmand sa fie afisat
biancasandovici17: Cu drag!
Alte întrebări interesante