Documente Academic
Documente Profesional
Documente Cultură
1. Raspuns corect: a
2. Răspuns corect: c
Justificare:
f(102030) = 20 + f(10203) ^ = 20 + 2080 = 2100
f(10203) = 20 + f(1020) | = 20 + 2060 = 2080
f(1020) = 20 + f(102) ^ = 20 + 2040 = 2060
f(102) = 20 + f(10) | = 20 + 2020 = 2040
f(10) = 2020 şi revenim în calculele ^
de mai sus:|
3. Răspuns corect: d
Justificare:
Mai avem nevoie de încă 4 soluţii. Le scriem cu atenţie,
încercând de fiecare dată să modificăm cât mai de la coadă şi,
când nu mai e posibil, revenim la cea anterioară celei pe care am
încercat s-o modificăm şi nu s-a putut:
plecăm de la ultima dată de ei, 123. Încercăm mai întâi
să mai punem cifre după: nu se mai poate (că trebuie maxim 3)
aşa că încercăm să-l creştem pe 3 - nu se mai poate (e maximul
admis) aşa că revenim la cifra de dinainte, 2, pe care-o facem 3.
Avem aşadar a 9-a soluţie: 13
Mergem mai departe, punând cifre noi după:
130 - nu e bun (e par)
131 - e bun - deci asta e a 10-a soluţie. Nu mai putem să-i
adăugăm noi cifre că ar fi 4, aşa că îl plusăm pe ultimul 1.
ar urma 132 - nu e bun (e par)
133 - e bun - deci asta e a 11-a soluţie. Nu mai putem să-i
adăugăm cifre noi, aşa că încercăm să plusăm ce avem - nu mai
e posibil că am ajuns la 3 (cifra maximă) - ne întoarcem până
la primul 1 pe care-l facem
2 - dacă era cifră impară ar fi fost bine, dar cum e cifră pară
nu e bine - mergem mai departe, adăugând noi cifre:
20 - din păcate e impar, aşa că adăugăm noi cifre:
200 - din păcate şi-ăsta e impar. Nu mai putem adăuga cifre noi aşa
că rămânem şi schimbăm ultimul 0 în 1 şi obţinem cea de-a 12-a soluţie,
cea care se cere: 201
4. Răspuns corect: b
Dacă un anumit număr apare în vectorul de taţi de 3 ori (cum e cazul lui 9 din
exemplul dat de ei) înseamnă că acel nod este de 3 ori tată la diferite noduri,
deci are 3 fii. Astfel, pe exemplul dat, trebuie să identificăm CÂTE valori se
repetă FIX de 2 ori în vectorul de taţi.
Astfel, identificăm valorile 2, 8 şi 7 care se repetă de exact 2 ori, deci
răspunsul este 3
5. Răspuns corect: c
SUBIECTUL al II-lea
c)
#include <iostream>
using namespace std;
int main()
{
int n,p=1,m=0,k=0,c,x,i;
cin>>n;
while(n)
{
cin>>x;
for(i=1;i<=k;i++)x/=10;
if(x)c=x%10;
else c=n%10;
m=c*p+m;
n/=10;
p*=10;
k++;
}
cout<<m;
return 0;
}
d) Remarcăm că, de fapt, intrucţiunea pentru i <- 1,k execută x <- [x/10]
are rolul de a şterge k cifre din număr. Acest lucru îl putem face pe baza
variabilei p care de fapt progresează (vezi tabelul) ca 1, 10, 100, 100
Astfel, simpla atribuire x <- [x/p] poate înlocui acest for.
Deci, iată rezolvarea (!atenţie, trebuie rescrisă toată secvenţa):
3. Răspuns: 8viCtORIe
Prima atribuire calculează în k diferenţa dintre codurile ASCII ale literlor mici
şi ale celor mari. Cum 'a' = 97 şi 'A' = 65, de fapt această diferenţă va fi 32.
În continuare, se iau caracterele din string şi, dacă avem literă mare, la codul
său ASCII se adună k, deci este transformată în litera mică corespunzătoare iar
dacă nu, se scade valoarea k, deci se va transforma la litera mare corespunzătoare.