Informatică, întrebare adresată de eduardmihailescu26, 8 ani în urmă

Salut. Ma poate ajuta cineva cu aceasta problema de informatica clasa a 12-a? este din testul de antrenament bac 2007 profil real varianta 17 (c++ va rog). Thx.

Anexe:

Răspunsuri la întrebare

Răspuns de ib2346
1

Explicație:

a) Se parcurg in paralel cele două numere cat timp ambele au cifre, se compara cifrele aflate în acel moment pe ultima poziție, se afișează cifra mai mare, apoi se taie din numărul in care se afla, celalalt număr rămânând la fel. In caz de egalitate, se afișează ambele și se taie cifra din ambele.

După aceea, se iau separat cele două numere, verificandu-se daca mai exista cifre, in acel caz afișandu-se fără nicio comparație, nemaifiind necesara. Eficienta este data de faptul că nu se rețin cifrele in tablouri auxiliare și se parcurg numerele o singura data, având complexitatea de spatiu și de timp O(m+n).

b)

#include <iostream>

using namespace std;

int main()

{

int n, m;

cin >> n >> m;

do

{

if(n % 10 > m % 10)

{

cout << n % 10;

n /= 10;

}

else if(n % 10 < m % 10)

{

cout << m % 10;

m /= 10;

}

else

{

cout << n % 10 << m % 10;

n /= 10;

m /= 10;

}

}

while(n > 0 && m > 0);

while(n > 0)

{

cout << n % 10;

n /= 10;

}

while(m > 0)

{

cout << m % 10;

m /= 10;

}

return 0;

}


eduardmihailescu26: Mersi mult!
Alte întrebări interesante