Cerința
Se dă un şir format din n
numere naturale . Un număr din şir se numeşte special de ordin k
dacă suma cifrelor sale este divizibilă cu 9
, iar cele k
numere situate înaintea sa în şir şi cele k
numere situate după el în şir sunt prime. Se cere să se afle câte numere speciale de ordin 0
şi câte numere speciale de ordin 1
sunt în şir, precum şi ordinul maxim al unui număr special din şir.
Date de intrare
Fișierul de intrare numarspecial.in
conține pe prima linie numărul n
, iar pe a doua linie n
numere naturale separate prin spații.
Date de ieșire
Fișierul de ieșire numarspecial.out
va conține pe prima linie numărul A
, reprezentând numărul numerelor speciale de ordin 0
din şir, pe a doua linie numărul B
, reprezentând numărul numerelor speciale de ordin 1
din şir, iar pe a treia linie ordinul maxim al unui număr special din şir.
Restricții și precizări
1 ≤ n ≤ 1.000.000
- numerele din şir sunt mai mici decât
1.000.000
- dacă un număr este special de ordin
k
, atunci el este şi special de ordink-1
,k-2
,…,1
,0
- prima cerinţă se notează cu
40p
, a doua cu40p
şi a treia cu20p
- pentru a obţine punctaje parţiale trebuie ca în fişierul
numarspecial.out
să afişaţi trei numere
Exemplu
numarspecial.in
13 3 72 5 7 2 2 891 2 13 29 5 27 1
numarspecial.out
3 2 4
Explicație
În şir sunt 3
numere speciale de ordin 0
, şi anume 72
, 891
şi 27
, două numere speciale de ordin 1
, respectiv 72
şi 891
, iar ordinul maxim al unui număr special este 4
, al numărului 891
( are 4
numere prime înaintea sa şi 4
după el).
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 NumarSpecial:
#include <fstream>
using namespace std;
ifstream f("numarspecial.in");
ofstream g("numarspecial.out");
long long n , i , j , minim , maxim , a , b , p , q , x ;
int v[1000002] ;
int main()
{
f >> n ;
a = 0 ;
b = 0 ;
maxim = 0 ;
// eratostene
v[1] = 1 ;
for( i=2 ; i<=1000000 ; i++ )
if ( v[i]==0 )
{
j = i * i ;
while ( j<=1000000 )
{
v[j] = 1 ;
j = j + i ;
}
}
//prelucrare sir
q = 0 ;
for ( i=1 ; i<=n ; i++ )
{
f >> x ;
if ( v[x]==0 ) q++ ;
else
{
if (( p>0 ) and ( q>0 )) b++ ;
if ( p>q ) minim = q ;
else minim = p ;
if ( minim>maxim ) maxim = minim ;
if ( x%9==0 ) { a++ ; p=q ; q=0 ; }
else { p=0 ; q=0 ; }
}
}
if ( v[x]==0 )
{
if (( p>0 ) and ( q>0 )) b++ ;
if ( p>q ) minim = q ;
else minim = p ;
if ( minim>maxim ) maxim = minim ;
}
g << a << "\n" << b <<"\n" << maxim ;
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 #1926 NumarSpecial
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1926 NumarSpecial 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!