Budi este elev în clasa a 6-a şi dorește să-şi impresioneze profesoara de informatică, așa ca s-a
hotărât să rezolve o problemă primită de fratele său mai mare, la un concurs.
Pentru un şir de Q numere, Budi e nevoit să rezolve una din următoarele cerințe :
1. Pentru fiecare număr, va trebui să afișeze “DA” , dacă numărul este prim şi
palindrom, sau “NU” în caz contrar
2. Să afișeze suma tuturor numerelor DIVLA. Un număr este DIVLA dacă răsturnatul
său este divizibil cu suma cifrelor sale.
Cerința
Ajutați-l pe Budi sa rezolve problema dorită !
Date de intrare
Fișierul de intrare divla.in va conține pe prima linie un număr C , reprezentând cerinţa care trebuie
rezolvată. Pe următoarea linie numărul Q, cu semnificația din enunț, iar pe următoarea linie cele Q
numere.
Date de ieșire
Fișierul divla.out va conține:
Daca C = 1 : Q rânduri cu mesaje de tipul “DA” sau “NU”, cu semnificația din enunț,
corespunzătoare celor Q numere
Daca C = 2: suma tuturor numerelor DIVLA.
Restricții şi precizări
1 <= Q <= 1000
1 <= x <= 1000000 , unde x reprezintă un număr citit .
Q şi x sunt numere naturale.
1 <= Suma <= 1000000000 , unde Suma reprezintă valoarea afișata la cerința 2 .
Se garantează ca niciun număr x nu se divide cu 10 .
Pentru rezolvarea primei cerințe se acorda 40% din punctaj, iar pentru cea de a 2-a
cerința 60% din punctaj.
Exemple:
divla.in divla.out Explicatii
1
7
3 121 11 1234 986 1 181
DA
NU
DA
NU
NU
NU
DA
Budi are de rezolvat prima cerința a problemei.
3 este prim şi palindrom, la fel 11 şi 181, iar
celelalte nu îndeplinesc aceste două condiții.
2
8
8 21 48 54 31 27 71 24
182 Budi trebuie să rezolve cerința a 2-a a problemei.
Numerele care convin sunt : 8 21 48 54 27 24
Suma acestora este : 182
Timp maxim de execuție: 0.1 secunde/test.
Memorie totală disponibilă: 2 MB, din care 2 MB pentru
Răspunsuri la întrebare
Răspuns:#include <iostream>
#include <fstream>
using namespace std;
ifstream in("divla.in");
int prim(int n)
{
if(n<2)
return 0;
else
for(int i=2;i<n;i++)
if(n%i==0)
return 0;
return 1;
}
int palindrom(int n)
{
int i,x=0;
while(n)
{
x=x*10+n%10;
n=n/10;
}
return x;
}
int suma(int n)
{
int nr=0;
while(n)
{
nr=nr+n%10;
n=n/10;
}
return nr;
}
int main()
{
int C,Q,s[100000],i;
in>>C>>Q;
for(i=1;i<=Q;i++)
in>>s[i];
if(C==1)
{
for(i=1;i<=Q;i++)
if(prim(s[i])&&palindrom(s[i])==s[i])
cout<<"DA"<<endl;
else
cout<<"NU"<<endl;
}
else
if(C==2)
{
int sum=0,ok=0;
for(i=1;i<=Q;i++)
if(palindrom(s[i])%suma(s[i])==0)
{sum=sum+s[i];
ok=1;}
if(ok)
cout<<sum;
else
cout<<"Nu exista numere divla";
}
return 0;
}
Explicație: