Cum provocarea de săptămâna trecută a avut mare succes, venim cu o nouă provocare pentru voi:
Se dau două numere întregi a și b.
Cerința:
Să se scrie secvența de cod care interschimbă cele 2 valori, fără a folosi variabile auxiliare.
Cum provocarea de săptămâna trecută a avut mare succes, venim cu o nouă provocare pentru voi:
Se dau două numere întregi a și b.
Cerința:
Să se scrie secvența de cod care interschimbă cele 2 valori, fără a folosi variabile auxiliare.
a = a + b;
b = a – b // fost a
a = a – b // fost b
Da’ voi mai si munciti? 🙂
Cum a zis Alexandra, cu variatiuni, se poate face si cu inmultire / impartire sau cu xor/^.
Mai exista varianta directa in anumite limbaje (am uitat care au implementata atribuirea “paralela”), adica (a,b) = (b,a), in pehaspe, ceva similar (cu acelasi rezultat) ar fi: list($a,$b) = array($b,$a)
Mai si muncim, mai si muncim 🙂
Nicely done, Alexandra & Emil!
Solutii..mai sunt multe!
$a ^= $b ^= $a ^= $b;
Good one, NoName!
Si solutiile colegilor mei:
1.
$a = $a + $b
$b = $a – $b
$a = $a – $b
2.
$a = $a * $b;
$b = $a / $b;
$a = $a / $b;
3.
$a = $a ^ $b;
$b = $a ^ $b;
$a = $a ^ $b;
4.
list($a, $b) = array($b, $a);
SAU
list($a,$b) = array_reverse(array($a,$b));
5.
extract(array(‘a’=>$b, ‘b’=>$a));
6.
file_put_contents(‘a.txt’,$a);
file_put_contents(‘b.txt’,$b);
$a = file_get_contents(‘b.txt’);
$b = file_get_contents(‘a.txt’);
7.
$a = $a <> strlen(decbin($b));
$a = $b << (strlen(decbin($a)) – strlen(decbin($b))) ^ $a;