6
votes

Comment échangez-vous deux variables entier sans utiliser de conditions, de coulée ou de variables supplémentaires?

Il y a deux variables entière. Pouvez-vous échanger ces variables entière sans utiliser de conditions si, sans casting, et sans utiliser de variables supplémentaires? Par exemple: xxx

a> b toujours. La réponse doit être a == 5 et b == 10


9 commentaires

Non, je n'ai aucune idée de la façon de ralentir un problème ou de le faire aller plus vite.


semble être une tâche des devoirs si c'est le cas, vous devriez l'étiqueter en tant que telle


Duplicaté: Stackoverflow. com / questions / 804706 / ...


pouvez-vous résoudre ce problème


N'est-ce pas charmant, quand quelqu'un évite une duplication des devoirs? : P


Certainement pas une maison - trop complexe pour cela. OK pour l'entretien.


Juste par intérêt de quelqu'un d'un autre camp, est une solution comme la liste ($ A, $ b) = tableau ($ B, $ a) possible dans c #?


me rappelle un rubis A, B = B, une solution :) (ses tableaux)


Je ne vois aucune indication de la langue ici, il ne peut donc pas être répondu de manière satisfaisante.


6 Réponses :


3
votes

Oui, vous pouvez le faire en utilisant plus / moins opération.

Example:
num1 = num1 + num2;                
num2 = num1 - num2;                
num1 = num1 - num2;


3 commentaires

Mieux vaut utiliser l'addition / la soustraction pour éviter les débordements et les problèmes d'arrondissement. Cela dit, il vaut mieux utiliser une variable Temp, mais toujours.


Multiplier / Diviser ne fonctionne pas si NUM2 est 0.


Merci pour les informations et les mises à jour maintenant



11
votes
a=a+b;
b=a-b;
a=a-b;

0 commentaires

4
votes

C'est un peu tour. XXX


0 commentaires

3
votes
a=a+b
b=a-b
a=a-b
That's it!

0 commentaires

14
votes

Si vous pensez être intelligent fort> en n'utilisant pas la 3e variable, faites quelques tests de performance et vous voyez que le moyen beaucoup plus rapide est d'utiliser 3ème int code> pour stocker le variable temporairement.

Quoi qu'il en soit, j'ai résolu le problème avec l'opérateur XORWise: P>

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


7 commentaires

En savoir plus sur l'échange avec XOR est ici ici en.wikipedia.org/wiki/xor_swap_algorithm


Cela ne fonctionne pas si a == b .


Quelle langue utilisez-vous?


@Axoren: Non, cela n'a pas échoué.


Mon erreur. Il échoue si a et B sont des références à la même variable, pas si elles sont la même valeur. Par exemple: int c; int * a = & c; int * b = & c; . Dans ce cas, * a ^ = * b entraînera les deux * a et * b pour devenir 0 en même temps, menant au valeur étant perdue. Il est toujours important de noter que si vous essayez d'implémenter une méthode d'échange qui fonctionne avec les adresses de la variable.


En fait, toutes les réponses à cette question échouent dans cette affaire. Je pense que cela devrait faire partie d'une question d'entretien.


Votre exemple "échoue" car vous avez les variables pointant vers la même position de mémoire. Ce n'est pas dans la portée de la question



3
votes

simple essayer ce xxx

et c'est il


0 commentaires