Python Programma per scambiare due numeri senza utilizzare una terza variabile

โšก Riepilogo intelligente

scambiareping due numeri senza una terza variabile scambiano i loro valori sul posto usando l'addizione aritmetica e la sottrazionetraczione, l'operatore XOR bit a bit, o trucchi di aritmetica bit a bit. Python รจ possibile anche effettuare lo scambio direttamente tramite l'estrazione della tupla.

  • ๐Ÿ”˜ Metodo classico: Lo scambio tradizionale memorizza un valore in una variabile temporanea, cosa che queste tecniche evitano.
  • โž• Scambio aritmetico: Scambia i valori con a = a + b, poi b = a โˆ’ b, poi a = a โˆ’ b.
  • ๐Ÿ”€ Scambio XOR: Applica l'operatore XOR bit a bit tre volte per scambiare gli interi senza overflow.
  • ๐Ÿงฎ Aritmetica bit a bit: Utilizzare gli operatori AND, OR e complemento per riprodurre addizione e sottrazionetraczione.
  • ๐Ÿ Python scorciatoia: L'operazione di scomposizione di una tupla, a, b = b, a, scambia due valori qualsiasi in una riga.
  • ๐Ÿค– Intelligenza artificiale e dati: Lo scambio di tuple e l'indicizzazione NumPy riordinano gli elementi degli array nella preparazione all'apprendimento automatico.

Scambia due Numbers Senza utilizzare una terza variabile

Le sezioni seguenti illustrano quattro metodi per effettuare scambi senza utilizzare una variabile temporanea, oltre al problema dell'overflow aritmetico.

Nei linguaggi di programmazione, lo scambioping significa scambiare i valori di due variabili. La variabile puรฒ contenere un numero, una stringa, una lista o un array, un oggetto, ecc. Il modo generale di scambioping consiste nell'utilizzare una variabile temporanea per memorizzare i valori. Ad esempio,

Scambia due Numbers

Le fasi generali dello scambioping due numeri sono:

  • Dichiarare una variabile temporanea C
  • Assegna il valore di A a C, ovvero C = A. Ora C = 20
  • Assegna il valore di B ad A, quindi A = 30
  • Assegna il valore di C a B, quindi B = 20, poichรฉ C ha il valore 20.

Ecco come si scambiaping Questo viene fatto con l'aiuto di una variabile temporanea e funziona sia per numeri interi che per numeri decimali.

Scambia utilizzando l'equazione aritmetica

Come sappiamo, lo scambioping significa scambiare il contenuto di due oggetti, campi o variabili. Scambiare usando un'operazione aritmetica significa eseguire lo scambio usando un'equazione matematica, cioรจ addizione e sottrazione.traczione.

Se ci vengono dati due numeri e ci viene chiesto di scambiarli senza usare una variabile temporanea, allora possiamo scambiarli utilizzando tre equazioni aritmetiche.

Pseudocodice per lo scambioping numeri utilizzando un'operazione aritmetica:

A = A + B
B = A - B
A = A - B

Supponiamo di avere due numeri, A = 20 e B = 30.

Condizione 1: A = A+B

Quindi, il valore attuale di A รจ 20+30 = 50

Condizione 2: B = AB

Ora, B = 50-30 = 20
Possiamo constatare di aver ottenuto il valore di A in B.

Condizione 3: A = AB

Infine, A = 50-20 = 30
A ha il valore iniziale di B.

Quindi abbiamo semplicemente scambiato i numeri.

Ecco il programma per scambiare due numeri in C/C++:

#include<stdio.h>
int main()
{
	int a, b;
	printf("Enter value of A: ");
	scanf("%d", & a);
	printf("Enter value of B: ");
	scanf("%d", & b);
	printf("A = %d, B = %d", a, b);
	a = a + b;
	b = a - b;
	a = a - b;
	printf("\nNow, A = %d, B = %d", a, b);
}

Produzione:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

Programma in Python:

a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = a + b
b = a - b
a = a - b
print("Now, A = {} and B = {}".format(a, b))

Produzione:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

Ora in Python, non abbiamo nemmeno bisogno di eseguire operazioni aritmetiche. Possiamo usare:

a,b = b,a

Ecco una dimostrazione in cui a=20, b=30;

Scambia utilizzando l'equazione aritmetica

Scambio tramite XOR bit a bit Operator

Questo metodo รจ anche noto come scambio XOR. XOR significa OR esclusivo. In questa operazione bit a bit, utilizziamo due bit come input per l'operazione XOR. Per ottenere un output dall'operazione XOR, รจ sufficiente che uno solo degli input sia 1. Altrimenti, l'output sarร  0. La tabella seguente mostra l'output per tutte le combinazioni di input A e B.

Dobbiamo capire come funziona l'operazione XOR per scambiare due numeri utilizzando l'operazione bit a bit. Ecco una tabella per l'operazione XOR, dove A e B sono i valori di input.

A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0

Se due input hanno lo stesso valore, l'operazione XOR restituisce 0; altrimenti, 1. In questo esempio, utilizzeremo un'operazione XOR a 3. Nella maggior parte dei linguaggi di programmazione, l'operazione XOR รจ indicata con il simbolo "^".

Supponiamo che A=4 (in binario = 0100) e B=7 (in binario, 0111)

Condizione 1: A = A^B

A 0 1 0 0
B 0 1 1 1
A^B 0 0 1 1

Ora, A = 0011 (in binario).

Condizione 2: B = A^B

A 0 0 1 1
B 0 1 1 1
A^B 0 1 0 0

Quindi B = 0100, che era il valore binario iniziale di A.

Condizione 3: A = A^B

A 0 0 1 1
B 0 1 0 0
A^B 0 1 1 1

Infine, A = 0111, che era il valore binario equivalente di B.

Programma in C/C++:

#include<stdio.h>
int main()
{
	int a, b;
	printf("Enter value of A: ");
	scanf("%d", & a);
	printf("Enter value of B: ");
	scanf("%d", & b);
	printf("A = %d, B = %d", a, b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("\nNow, A = %d, B = %d", a, b);
}

Produzione:

Enter value of A:4
Enter value of B:7
A=4, B=7
Now, A=7, B=4.

Programma in Python:

a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = a ^ b
b = a ^ b
a = a ^ b
print("Now, A = {} and B = {}".format(a, b))

Produzione:

Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.

scambiare Numbers utilizzando l'aritmetica bit a bit

Questo metodo รจ lo stesso del metodo aritmetico, ma useremo operazioni bit a bit come AND, OR e complemento per eseguire addizioni e sottrazioni.tracPrima di passare ai passaggi, diamo una rapida occhiata al concetto di "complemento".

Il complemento a uno significa trasformare tutti gli 0 in 1 e tutti gli 1 in 0. Facciamo un esempio.

  • Supponiamo di considerare il numero 23 come un numero decimale.
  • La conversione in binario ci dร  10111. Ci sono solo 5 bit, ma il computer memorizza i numeri in 8, 16, 32, 64... bit. Quindi aggiungiamo uno zero davanti al binario. Questo non cambierร  il valore originale del numero. Quindi diventerร  00010111.
  • Come sappiamo, il complemento a 1 significa cambiare tutti gli 0 in 1 e tutti gli 1 in 0, quindi eseguire il complemento a 1 su 00010111 dร  11101000.

Il complemento a uno รจ rappresentato dal simbolo "~" nella maggior parte dei linguaggi di programmazione. Anteponendo questo simbolo a qualsiasi valore intero o a virgola mobile si ottiene il complemento a uno.

E complemento a 2 significa aggiungere โ€œ1โ€ binario al complemento a 1. Se facciamo il complemento a 2 al numero sopra:

  • Binario = 00010111
  • Complemento a 1 = 11101000
  • Complemento a due:

11101000

+ 1

11101001

Quindi, il complemento a 2 รจ 11101001. Questo รจ il binario per -23.
In sintesi, per eseguire il complemento a 2 di un numero A, sarร  simile a:

Complemento a 2 di A = (~A) + 1

Ora supponiamo che A=8 (binario 00001000), B=10 (00001010)

Condizione 1: A = (A e B) + (A | B)

รˆ equivalente a A = A + B.

A e B = 00001000 e 00001010 = 00001000

A | B = 00001000 | 00001010 = 00001010

Ora, 00001000 + 00001010 = 00010010 (decimale 18)

Quindi A = 18

Condizione 2: B = LA + (~B) + 1

รˆ equivalente a B = AB

Qui, B = A โ€“ B

Dalla discussione precedente, se dobbiamo eseguire un subtracIn questo caso, eseguiamo il complemento a due del numero negativo e poi lo aggiungiamo.

Quindi, -B = ~B + 1

Ora, B = 00010010 + (11110101) + 1 = 00001000

Il valore di B รจ equivalente al decimale 8, che era il valore iniziale.

Condizione 3: LA = LA + (~B) + 1

รˆ equivalente ad A = AB

Ora, A = 00010010 + 11110111 + 1

A = 00001010 (equivalente a 10 decimale)

Infine, A ha ottenuto il valore di B. Quindi, lo scambioping รจ stato completato.

Programma in C/C++:

#include<stdio.h>
int main()
{
	int a, b;
	printf("Enter value of A: ");
	scanf("%d", & a);
	printf("Enter value of B: ");
	scanf("%d", & b);
	printf("A = %d, B = %d", a, b);
	a = (a & b) + (a | b);
	b = a + ~b + 1;
	a = a + ~b + 1;
	printf("\nNow, A = %d, B = %d", a, b);
}

Produzione:

Enter the value of A: 8
Enter the value of B:10
A=8, B=10
Now, A=10, B=8

Programma in Python:

a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = (a & b) + (a | b)
b = a + ~b + 1
a = a + ~b + 1
print("Now, A = {} and B = {}".format(a, b))

Produzione:

Enter the value of A: 25
Enter the value of B: 25
A = 25 and B = 25
Now, A = 25 and B = 25

Che cos'รจ l'overflow aritmetico?

Il termine overflow significa superamento del limite. L'overflow aritmetico si verifica quando il risultato di un'operazione aritmetica supera l'intervallo o il limite della rappresentazione numerica dell'architettura del computer. Ad esempio, se un numero viene diviso per zero, diventa infinito e il sistema numerico del computer non puรฒ rappresentarlo con 32 o 64 bit.

Rappresentazione dei numeri interi

Rappresentazione di numeri interi in un sistema a 32 bit

La conseguenza dell'overflow aritmetico puรฒ essere:

  • La somma di due numeri positivi dร  come risultato un numero negativo, perchรฉ il bit di segno potrebbe diventare 1, ovvero un numero negativo.
  • La somma di due numeri negativi dร  come risultato un numero positivo, perchรฉ il bit di segno potrebbe diventare 0, indicando quindi un numero positivo.

DOMANDE FREQUENTI

scambio XORping รจ il preferito per i colloqui: nessuna memoria extra, nessun overflow. L'aritmetica รจ un buon backup e Python Gli sviluppatori di solito scrivono semplicemente a, b = b, a.

No. L'operazione XOR bit a bit funziona solo con sequenze di bit interi, non con numeri in virgola mobile, double o puntatori. Per i numeri in virgola mobile, utilizzare invece l'unpacking di tuple o lo scambio aritmetico.

Se entrambe le variabili condividono una posizione di memoria, scambio XORping Imposta il valore a 0. Aggiungi un controllo if ogni volta che รจ possibile l'aliasing.

Sรฌ: a = a * b, b = a / b, a = a / b. Ma fallisce quando uno dei valori รจ 0 e perde la precisione in virgola mobile.

Solo l'unpacking delle tuple รจ possibile. Scrivere a, b = b, a scambia stringhe, liste o oggetti. I trucchi aritmetici e XOR sono validi solo per i numeri interi.

A malapena. I compilatori moderni ottimizzano giร  lo scambio di variabili temporanee, quindi questo trucco raramente migliora la velocitร . Readable Il codice รจ piรน importante del salvataggio di una singola variabile.

Sรฌ. Il codice di apprendimento automatico scambia i valori con Python disimballaggio della tupla e NumPy L'indicizzazione come arr[[i, j]] = arr[[j, i]] scambia le righe dell'array sul posto.

Sรฌ. GitHub Copilot e assistenti IA simili producono scambi XOR, aritmetici e di decompressione di tuple a partire da un input. RevEsaminare ciascuna per individuare bug di overflow e aliasing.

Riassumi questo post con: