Je dois échanger deux variables avec une valeur de numéro sans utiliser une troisième variable. Quelle est la solution simple? P>
6 Réponses :
Voyons l'une des méthodes, notamment en utilisant des opérateurs arithmétiques.
Considérons 2 variables disent x = 50 et y = 70 et voyons comment échanger la valeur de deux variables qui font x = 70 et y = 50 sans utiliser la troisième variable. Cela peut être fait en utilisant des opérations arithmétiques suivantes, nommément
x = x + y
y = x - y
x = x - y
Qui donne
• x = x + y donne x = 70 + 50 an donc x est égal à 120
• y = x - y donne y = 120 - 70 qui fait la valeur de y comme 50
• x = x - y donne x = 120 - 50 et donc la valeur de x devient 70 p>
Et si X ou Y étaient très grands proportionnels à l'autre?
c'est une bonne solution, mais doit faire attention aux débordements
Réponse x - = y = (x + = y) - y; code> et dites à l'enseignant qui est l'une des questions la plus lamestes de tous les temps.
@Amadan Sauf quand les gens utilisent des choses comme celles-ci comme des questions astuces lors des interviews, comme si cela s'est avéré quelque chose ...: /
Une autre manière populaire est la stratégie d'échange XOR. http://en.wikipedia.org/wiki/xor_swap_algorithm p>
Ici, nous avons ceci dans MIPS assembleur. La première solution est longue et mauvaise. Le second avec XOR est meilleur.
addi $t0, $0, -5 addi $t1, $0, 15 add $t0, $t0, $t1 sub $t1, $t1, $t0 nor $t1, $0, $t1 addi $t1, $t1, 1 sub $t0, $t0, $t1 #### xor $t0, $t0, $t1 xor $t1, $t0, $t1 xor $t0, $t0, $t1
Selon le type de variable, vous pouvez utiliser Interverrouillé.Exchange . Cela utilise une opération atomique pour faire le swap. P>
int x = 15; int y = 5; x = x + y; y = x - y; x = x - y;
Vous pouvez y parvenir avec XOR
int A = ...; int B = ...; A = A ^ B; B = A ^ B; A = A ^ B;
@Bertrand, je viens de faire un "test d'esprit" et je crois toujours que ça va bien. Si un équivaut à B, dans la première affectation, le résultat d'un 0, alors b est attribué à 0 xor B qui est B, puis a est attribué 0 Xor B qui est à nouveau (ce qui était égal au démarrage A) .
A = 1, b = 1. Étape 1: A = A ^ b = 1 ^ 1 = 0. Étape 2: B = A ^ b = 0 ^ 1 = 1. Étape 3: A = A ^ b = 0 ^ 1 = 1. On dirait que ça m'efforce.
duplicaillier possible de échanger les valeurs de deux variables sans utiliser troisième variable . Aussi échanger deux variables sans utiliser de variable Temp
Stackoverflow.com/ Questions / 804706 / ...
@Will j'ai vu des questions comme des questions astuces lors des interviews. Je ne sais pas ce que c'est censé prouver i>, mais je l'ai vu ..