40 votes

Comment permuter deux nombres sans utiliser de variables temp ou d'opérations arithmétiques ?

Cette équation permute deux nombres sans variable temporaire, mais utilise des opérations arithmétiques :

a = (a+b) - (b=a);

Comment puis-je le faire sans opérations arithmétiques ? Je pensais à XOR.

25voto

sreejith k s Points 273
a=a+b;
b=a-b;
a=a-b;

C'est simple mais efficace....

23voto

Loki Astari Points 116129

Pourquoi ne pas utiliser les librairies std ?

std::swap(a,b);

21voto

BiGYaN Points 1818

En C, cela devrait fonctionner :

a = a^b;
b = a^b;
a = a^b;

OU un look plus cool/plus geek :

a^=b;
b^=a;
a^=b;

Pour plus de détails, regardez cela. XOR est une opération très puissante qui a de nombreux usages intéressants qui surgissent ici et là.

9voto

Shubham A. Points 1400

Utilisation de XOR,

void swap(int &a, int &b)
{
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}

Une doublure avec XOR,

void swap(int &a, int &b)
{
    a ^= b ^= a ^= b;
}

Ces méthodes semblent être propres, car elles n'échouent pour aucun cas de test, mais encore une fois puisque (comme dans la méthode 2) la valeur de la variable est modifiée deux fois dans le même point de séquence, on dit qu'elle a un comportement indéfini déclaré par ANSI C.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X