Într-o zi frumoasă de vară, Alice se juca în parc. Deodată, văzu un iepure cu ceas, numit Iepurele Alb, sărind grăbit în scorbura unui copac. Curioasă, Alice îl urmări şi sări şi ea în scorbură. Spre mirarea ei, ajunse într-o sală mare cu N
uşi încuiate. Pe fiecare uşă era scris câte un număr natural. Într-o clipă, lângă ea apăru Iepurele Alb şi-i spuse că doar uşile cu numere magice pot fi deschise dacă are cheile potrivite. Pentru a o ajuta, Iepurele Alb i-a explicat că un număr magic este un număr natural care poate fi redus la o cifră prin complementarea cifrelor acestuia faţă de cifra sa maximă din scrierea zecimală, apoi prin complementarea cifrelor numărului obţinut faţă de cifra sa maximă şi aşa mai departe până când se obţine o cifră. Evident, nu toate numerele naturale sunt numere magice. De exemplu, uşa cu numărul 1234
poate fi deschisă cu cheia inscripţionată cu cifra 1
deoarece 1234
este un număr magic ce poate fi redus la cifra 1
prin complementări repetate (1234→3210→123→210→12→10→1
), iar uşa cu numărul 1204
nu poate fi deschisă deoarece 1204
nu este un număr magic (indiferent de câte ori s-ar repeta complementarea nu poate fi redus la o cifră: 1204→3240→1204→3240→1204 ...
).
Înainte să dispară, Iepurele Alb îi dădu o cheie aurie inscripţionată cu cifra K
şi o avertiză că poate deschide cu această cheie doar uşile cu numere magice ce pot fi reduse la cifra K
.
Cerinţe.
Scrieţi un program care să citească numerele naturale N
, K
şi cele N
numere naturale scrise pe cele N
uşi, şi care să determine:
a) cel mai mare număr par dintre numerele scrise pe cele N
uşi;
b) numărul uşilor care pot fi deschise cu cheia aurie inscripţionată cu cifra K
.
Date de intrare
Programul citește de la tastatură numerele N
şi K
și apoi N
numere naturale reprezentând numerele scrise pe cele N uşi.
Date de ieșire
Programul va afișa pe ecran, în această ordine:
- un număr natural reprezentând cel mai mare număr par dintre numerele scrise pe cele
N
uşi; - un număr natural reprezentând numărul uşilor care pot fi deschise cu cheia aurie inscripţionată cu cifra
K
.
Restricții și precizări
- complementarea cifrelor unui număr natural faţă de cifra sa maximă din scrierea zecimală constă în înlocuirea fiecărei cifre
c
din număr cu diferenţa dintre cifra maximă şi cifrac
; de exemplu, cifra maximă a numărului1234
este4
iar prin complementare se înlocuieşte cifra1
cu3
(=4-1
), cifra2
cu2
(=4-2
), cifra3
cu1
(=4-3
) şi cifra4
cu0
(=4-4
) rezultând numărul3210
; 7 ≤ N ≤ 10000
;≤0 ≤ K ≤ 9
;- pe fiecare uşă este scris un singur număr natural;
- există cel puţin o uşă pe care este scris un număr par;
- numărul scris pe oricare uşă (din cele
N
) este mai mare sau egal cu10
şi mai mic sau egal cu32800
; - pentru rezolvarea corectă a cerinţei a) se acordă
20%
din punctaj, iar pentru rezolvarea corectă a ambelor cerinţe se acordă100%
din punctaj.
Exemplu
Intrare
7 1 1204 1234 13 195 23 10 888
Ieșire
1234 3
Explicație
a) Sunt N=7
uşi pe care sunt scrise numerele 1204
, 1234
, 13
, 195
, 23
, 10
, 888
. Cel mai mare număr par dintre cele scrise pe uşi este 1234
.
b) Cheia primită este inscripţionată cu cifra K=1
şi deschide 3
uşi cu numerele 1234
, 23
şi 10
deoarece numerele magice dintre cele scrise pe uşi sunt: 1234
(1234→3210→123→210→12→10→1
), 13
(13→20→2
), 195
(195→804→84→4
), 23
(23→10→1
), 10
(10→1
), 888
(888→0
). Numărul 1204
nu este un număr magic.
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 Alice:
//autor. prof. Carmen Minca
#include <iostream>
using namespace std;
int main()
{
int x,cmax,c,z,nrmax,i,nc=0,a, maxpar=0,n,j,nr=0,k;
cin >> n >> k;
for(j=1;j<=n; j++)
{
cin >> a;
z=x=a;
if(a%2==0 && maxpar<a)maxpar=a;
do {
a=z; z=x; cmax=0; nc=0;
while(x)
{
c=x%10; x=x/10;nc++;
if(c>cmax)cmax=c;
}
nrmax=0;
for(i=1;i<=nc;i++)
nrmax=nrmax*10+cmax;
x=nrmax-z;
} while(x>9 && x!=z && x!=a);
if(x==k) nr++;
}
cout<<maxpar<<endl<<nr;
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 #979 Alice
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #979 Alice 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!