Scambia valori variabili senza crearne uno nuovo

4

Recentemente, mi sono trovato di fronte a una domanda che mi chiedeva di scambiare i valori delle variabili senza creare una variabile extra.

vale a dire. A = 10, B = 20. Come memorizzare da 20 a A e da 10 a B?

La soluzione è:

A = A + B     #new value of A=30
B = B + A     #new value of B=50
A = B - A     #new value of A=20
B = B - 2 * A #new value of B=10

quindi A = 20 e B = 10

Questo algoritmo ha un nome conosciuto?

    
posta dellasavia 17.05.2016 - 15:34
fonte

1 risposta

12

Questa è una variante più lunga e meno efficiente di Algoritmo di scambio XOR . Ripeterò qui le soluzioni più comunemente conosciute dal wiki:

# solution 1
A = A + B
B = A - B
A = A - B

# solution 2 (^ is XOR)
A = A ^ B
B = B ^ A
A = A ^ B

@PEMapModder

On the second last line, there is no difference between A^B and B^A right? Why swap them?

Non c'è differenza tra loro. Penso che i Wiki li scambino per ragioni storiche: per le istruzioni della macchina che usano 2 registri per le operazioni binarie (fonte e destinazione / destinazione, a differenza di MIPS che usa 3 registri per operazioni binarie), si dovrebbe scrivere la soluzione XOR come segue:

XOR A B       # A = A ^ B
XOR B A       # B = B ^ A
XOR A B       # A = A ^ B
    
risposta data 17.05.2016 - 15:54
fonte

Leggi altre domande sui tag