Python Programme permettant d'échanger deux nombres sans utiliser de troisième variable

⚡ Résumé intelligent

Échangerping Deux nombres sans troisième variable échangent leurs valeurs par addition et soustraction.traction, l'opérateur XOR bit à bit, ou astuces d'arithmétique bit à bit. Python peut également être échangé directement avec le dépaquetage de tuples.

  • (I.e. Méthode classique : L'échange classique stocke une valeur dans une variable temporaire, ce que ces techniques permettent d'éviter.
  • Échange arithmétique : Échangez les valeurs avec a = a + b, puis b = a − b, puis a = a − b.
  • 🔀 Échange XOR : Appliquez l'opérateur XOR bit à bit trois fois pour échanger des entiers sans dépassement de capacité.
  • 🧮 Arithmétique bit à bit : Utilisez les opérateurs ET, OU et complément pour reproduire l'addition et la soustraction.traction.
  • (I.e. Python raccourci: Le déballage de tuples, a, b = b, a, échange deux valeurs quelconques sur une même ligne.
  • 🤖 IA et données : Échanges de tuples et indexation NumPy pour réorganiser les éléments de tableaux dans la préparation à l'apprentissage automatique.

Échanger deux Numbers Sans utiliser de troisième variable

Les sections ci-dessous couvrent quatre façons d'effectuer un échange sans variable temporaire, ainsi que le dépassement de capacité arithmétique.

Dans les langages de programmation, échangerping L'échange consiste à permuter les valeurs de deux variables. La variable peut contenir un nombre, une chaîne de caractères, une liste, un tableau, un objet, etc. La méthode générale d'échange est la suivante :ping consiste à utiliser une variable temporaire pour stocker des valeurs. Par exemple,

Échanger deux Numbers

Les étapes générales d'un échangeping deux nombres sont :

  • Déclarez une variable temporaire C
  • Attribuez la valeur de A à C, ce qui signifie C = A. Maintenant C = 20
  • Attribuez la valeur de B à A, donc A = 30
  • Attribuez la valeur de C à B, donc B = 20, car C a la valeur 20.

Voici comment échangerping Cela se fait à l'aide d'une variable temporaire, et cela fonctionne aussi bien pour les nombres entiers que pour les nombres à virgule flottante.

Échanger à l'aide de l'équation arithmétique

Comme nous le savons, échangeping L'échange consiste à permuter le contenu de deux objets, champs ou variables. L'échange par opération arithmétique consiste à effectuer cet échange à l'aide d'une équation mathématique, c'est-à-dire une addition et une soustraction.traction.

Si l'on nous donne deux nombres et qu'on nous demande de les échanger sans utiliser de variable temporaire, alors, en utilisant trois équations arithmétiques, nous pouvons échanger les nombres.

Pseudocode pour l'échangeping nombres utilisant une opération arithmétique :

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

Supposons que nous ayons deux nombres, A = 20 et B = 30.

Condition 1: A = A+B

Donc, la valeur actuelle de A est 20 + 30 = 50

Condition 2: B = AB

Maintenant, B = 50-30 = 20
Nous pouvons constater que nous avons obtenu la valeur de A dans B.

Condition 3: A = AB

Finalement, A = 50-20 = 30
A a la valeur initiale de B.

Nous avons donc simplement échangé les numéros.

Voici le programme pour échanger deux nombres en 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);
}

Sortie :

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

Programme en 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))

Sortie :

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

Maintenant en Python, nous n'avons même pas besoin d'effectuer d'opérations arithmétiques. Nous pouvons utiliser :

une,b = b,une

Voici une démonstration où a=20, b=30 ;

Échanger à l'aide de l'équation arithmétique

Échange à l'aide de Bitwise XOR Operator

Cette méthode est également connue sous le nom d'échange XOR. XOR signifie OU exclusif. Cette opération bit à bit utilise deux bits comme entrées. Pour obtenir une sortie, une seule entrée doit être à 1. Sinon, la sortie sera à 0. Le tableau suivant présente la sortie pour toutes les combinaisons possibles des entrées A et B.

Nous devons comprendre le fonctionnement de l'opération XOR pour permuter deux nombres à l'aide d'une opération bit à bit. Voici un tableau récapitulatif de l'opération XOR, où A et B représentent les valeurs d'entrée.

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

Si deux entrées ont la même valeur, l'opération XOR renvoie 0 ; sinon, 1. Dans cet exemple, nous utiliserons une opération XOR à 3 entrées. Dans la plupart des langages de programmation, l'opérateur XOR est noté « ^ ».

Supposons que A=4 (en binaire = 0100) et B=7 (en binaire, 0111).

Condition 1: UNE = UNE ^ B

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

Maintenant, A = 0011 (en binaire).

Condition 2: B = A^B

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

Donc B = 0100, qui était la valeur binaire initiale de A.

Condition 3: A = A^B

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

Enfin, A = 0111, qui était la valeur binaire équivalente de B.

Programme en 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);
}

Sortie :

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

Programme en 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))

Sortie :

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

Échanger Numbers en utilisant l'arithmétique au niveau du bit

Cette méthode est identique à la méthode arithmétique, mais nous utiliserons des opérations bit à bit telles que ET, OU et complément pour effectuer l'addition et la soustraction.traction. Avant de passer aux étapes, jetons un coup d’œil rapide au « complément ».

Le complément à 1 consiste à remplacer tous les 0 par des 1 et les 1 par des 0. Prenons un exemple.

  • Prenons comme exemple le nombre 23, un nombre décimal.
  • La conversion en binaire nous donne 10111. Il n'y a que 5 bits, mais l'ordinateur stocke les nombres sur 8, 16, 32, 64 bits… Ajoutons donc un zéro devant le nombre binaire. Cela ne changera pas sa valeur initiale. Il deviendra donc 10111. 00010111.
  • Comme nous le savons, le complément à 1 consiste à remplacer tous les 0 par des 1 et les 1 par des 0. Il s'agit donc d'effectuer le complément à 1 sur… 00010111 donne 11101000.

Le complément à un est représenté par le symbole « ~ » dans la plupart des langages de programmation. Placer ce symbole avant une valeur entière ou à virgule flottante permet d'obtenir son complément à un.

Et le complément à 2 signifie ajouter un « 1 » binaire au complément à 1. Si nous faisons le complément à 2 du nombre ci-dessus :

  • Binaire = 00010111
  • Complément à 1 = 11101000
  • complément à 2 :

11101000

+ 1

11101001

Ainsi, le complément de 2 est 11101001. C'est le binaire pour -23.
En résumé, pour effectuer le complément à 2 d'un nombre A, cela ressemblera à :

Complément à 2 de A = (~A) + 1

Supposons maintenant que A=8 (binaire 00001000) et B=10 (00001010).

Condition 1: A = (A et B) + (A | B)

Cela équivaut à A = A + B.

A et B = 00001000 et 00001010 = 00001000

Un | B = 00001000 | 00001010 = 00001010

Maintenant, 00001000 + 00001010 = 00010010 (décimal 18)

Donc A = 18

Condition 2: B = A + (~B) + 1

Cela équivaut à B = AB

Ici, B = A – B

D'après la discussion précédente, si nous devons effectuer une sous-routinetracPour cela, on calcule le complément à deux du nombre négatif, puis on l'ajoute.

Donc -B = ~B + 1

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

La valeur de B est équivalente au nombre décimal 8, qui était la valeur initiale.

Condition 3: A = A + (~B) + 1

Cela équivaut à A = AB

Maintenant, A = 00010010 + 11110111 + 1

A = 00001010 (équivalent au nombre décimal 10)

Finalement, A a obtenu la valeur de B. Ainsi, l'échange a eu lieu.ping a été complété.

Programme en 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);
}

Sortie :

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

Programme en 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))

Sortie :

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

Qu’est-ce que le débordement arithmétique ?

Le terme « dépassement de capacité » signifie le dépassement d'une limite. Un dépassement de capacité arithmétique se produit lorsque le résultat d'une opération arithmétique excède la capacité de représentation numérique de l'architecture de l'ordinateur. Par exemple, si un nombre est divisé par zéro, il devient infini et le système de numération de l'ordinateur ne peut pas le contenir sur 32 ou 64 bits.

Représentation en nombre entier

Représentation de nombres entiers dans un système 32 bits

La conséquence du débordement arithmétique peut être :

  • L'addition de deux nombres positifs devient négative, car le bit de signe peut devenir 1, ce qui signifie un nombre négatif.
  • L'addition de deux nombres négatifs devient positive, car le bit de signe peut devenir 0, ce qui signifie un nombre positif.

FAQ

Échange XORping C'est le critère préféré des entretiens : pas de mémoire supplémentaire, pas de débordement. Les calculs arithmétiques constituent une solution de secours acceptable, et Python Les développeurs écrivent généralement simplement a, b = b, a.

Non. L'opération XOR bit à bit ne fonctionne qu'avec des séquences de bits entières, et non avec des nombres à virgule flottante, des nombres à virgule flottante double précision ou des pointeurs. Pour les nombres à virgule flottante, utilisez plutôt le dépaquetage de tuples ou l'échange arithmétique.

Si les deux variables partagent la même adresse mémoire, effectuez un échange XOR.ping Définit la valeur à 0. Ajoutez une vérification « si » chaque fois qu'un alias est possible.

Oui : a = a * b, b = a / b, a = a / b. Mais cela échoue lorsque l’une des valeurs est égale à 0 et entraîne une perte de précision des nombres à virgule flottante.

Seul le dépaquetage de tuples le permet. Écrire `a, b = b, a` échange des chaînes de caractères, des listes ou des objets. Les opérations arithmétiques et les astuces XOR ne concernent que les entiers.

À peine. Les compilateurs modernes optimisent déjà les échanges de variables temporaires, donc cette astuce améliore rarement la vitesse. Readable Le code est plus important que la sauvegarde d'une seule variable.

Oui. Le code d'apprentissage automatique échange des valeurs avec Python déballage de tuples, et NumPy L'indexation comme arr[[i, j]] = arr[[j, i]] échange les lignes du tableau sur place.

Oui. GitHub Copilot et les assistants IA similaires effectuent des opérations XOR, arithmétiques et de dépaquetage de tuples à partir d'une invite de commande. RevVérifiez chaque élément pour détecter les bugs de dépassement de capacité et d'aliasing.

Résumez cet article avec :