Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.
Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.
Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.
Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.
Meniu shortcuturi | ? |
Căutare probleme sau utilizatori | / |
Navigare printre rezultatele căutării | ↑, ↓ |
Meniu de contact și feedback | CTRL + Shift + F |
Ieșire din meniuri | Esc |
Setări editor | CTRL + Shift + S |
Schimbare stil editor | CTRL + Shift + E |
Șabloane de cod | CTRL + Shift + 1/2/3 |
Golire editor | CTRL + Shift + 4 |
Dându-se două numere a
și b
, să se interschimbe (swap) valorile lor, astfel încât a
să îi preia valoarea lui b
, iar a
să îi preia valoarea lui b
.
Exemplu. Dacă la început, a = 5
și b = 7
, după interschimbare, a = 7
și b = 5
.
Problema pare inițial ușoară: îi dăm lui a
valoarea b
, iar lui b
valoarea a
. Problema este însă următoarea — dacă îi dăm lui a
valoarea b
, valoarea inițială a lui a
se înlocuiește, așadar nu mai putem să îi dăm lui b
valoarea lui a
, deoarece acesta are altă valoare.
O primă metodă ar fi să creăm o variabilă auxiliară care să rețină valoarea inițială a lui a
. După aceea, lui a
îi atribuim valoarea b
, iar lui b
îi atribuim valoarea din variabila auxiliară (deoarece aici e salvată valoarea inițială a lui a
).
#include <iostream>
using namespace std;
int main()
{
//Declarăm și citim cele două numere
int a, b;
cin >> a >> b;
//Interschimbăm valorile celor două variabile
int aux = a;
a = b;
b = aux; //Dacă am fi scris b = a, b ar fi luat noua valoare a lui a (nu cea inițială), care este însuși b.
//Afișăm variabilele după interschimbare
cout << a << " " << b;
return 0;
}
Există o funcție care interschimbă valorile a două variabile — funcția swap()
.
Atenție! Această funcție nu este disponibilă pe toate mediile de programare și nu se poate utiliza la bacalaureat. Așadar, nu este recomandată folosirea acestei funcții.
#include <iostream>
using namespace std;
int main()
{
//Declarăm și citim cele două numere
int a, b;
cin >> a >> b;
//Interschimbăm valorile celor două variabile
swap(a, b);
//Afișăm variabilele după interschimbare
cout << a << " " << b;
return 0;
}
Există o metodă mai interesantă, care nu folosește vreo altă variabilă auxiliară. Totul este matematic și poate fi un picuț mai greu de înțeles.
Pentru început, la a
vom aduna valoarea din b
(a = a + b
). De aici, vom seta b
ca fiind a - b
(cum a
conține acum valoarea inițială a + b
, scăzând b
, obținem a + b - b = valoarea inițială a lui a
). În final, scădem din a
, valoarea b
(care conține acum valoarea inițială a lui a
).
Această metodă nu este în particular utilă, decât în situații în care memoria este extrem de limitată.
#include <iostream>
using namespace std;
int main()
{
//Declarăm și citim cele două numere
int a, b;
cin >> a >> b;
//Interschimbăm valorile celor două variabile
a = a + b;
b = a - b;
a = a - b;
//Afișăm variabilele după interschimbare
cout << a << " " << b;
return 0;
}