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.outsă 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!