Cerința
Costică este alergător la un maraton. El parcurge un traseu sub forma unei matrice cu n
linii şi m
coloane linie cu linie şi pe fiecare linie, de la stânga la dreapta. Matricea conţine numere naturale.
Dacă Costică întâlneşte un număr prim, el este penalizat, fiind trimis pe linia şi coloana anterioară, iar dacă acesta întâlneşte un număr perfect, poate avansa pe linia şi coloana următoare. Dacă mişcarea pe linie şi pe coloană depăşeşte limitele matricei, atunci se va efectua numai mişcarea care nu trece de aceste limite sau nu se va efectua nici o mişcare.
Afişaţi timpul t
în care parcurge Costică traseul, ştiind că deplasarea dintr-un element al matricei în oricare altul durează o secundă, iar fiecare penalizare sau avansare durează o secundă.
Un număr este perfect dacă suma cifrelor lui este un număr prim.
Dacă un număr este şi prim şi perfect, atunci el va fi considerat prim.
După penalizare sau avansare, numerele prime sau perfecte îşi pierd proprietățile.
Date de intrare
Programul citește de la tastatură numerele n
şi m
, iar apoi n*m
numere naturale, separate prin spații.
Date de ieșire
Programul va afișa pe ecran numărul t
, reprezentând timpul în care Costică parcurge traseul.
Restricții și precizări
1 ≤ n,m ≤ 500
- cele
n
numere citite vor fi mai mici decât1.000.000
Exemplu
Intrare
4 5 6 9 3 2 1 8 3 12 4 0 1 1 34 8 7 5 3 5 9 8
Ieșire
28
Explicație
2 3 5 7
sunt numere prime, iar 2 3 5 7 12 34
sunt numere perfecte.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Cursă :
#include <iostream>
using namespace std;
int main()
{
int n , m , i , f[501][501] , t=0 , j , sum , ok , ok2 , h , copie ;
cin >> n >> m ;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
cin >> f[i][j] ;
}
}
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
t++ ;
copie=f[i][j] ;
ok=1 ;
if(copie == 1 || copie == 0)
{
ok=0 ;
}
else{
for(h=2; h*h<=copie; h++)
{
if(copie % h*h == 0){ok=0; }
}
}
ok2=1;
sum=0;
while(copie != 0)
{
sum+=copie%10 ;
copie/=10 ;
}
if(sum==1 || sum==0){ok2=0 ; }
else{
for(h=2; h*h<=sum; h++)
{
if(sum%h*h==0){ok2=0 ; }
}
}
if(ok == 1)
{
if(i==1 && j==1)
{
f[i][j]=0;
}
else{
t++ ;
f[i][j]=0 ;
if(i > 1){i-- ;}
if(j > 1){j-- ;}
}
}
else if(ok2 == 1)
{
if(i==n && j==m)
{
f[i][j]=0;
}
else{
t++ ;
f[i][j]=0;
if(i < n){i++ ;}
if(j < m){j++ ;}
}
}
}
}
cout << t ;
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1748 Cursă
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1748 Cursă de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!