Python Program za zamjenu dva broja bez korištenja treće varijable

⚡ Pametni sažetak

Razmijenitiping Dva broja bez treće varijable zamjenjuju svoje vrijednosti na mjestu koristeći aritmetičko zbrajanje i oduzimanjetraccija, bitni XOR operator ili bitni aritmetički trikovi. Python također se može izravno zamijeniti raspakiranjem tuplea.

  • 🔘 Klasična metoda: Uobičajena zamjena sadrži jednu vrijednost u privremenoj varijabli, što ove tehnike izbjegavaju.
  • Aritmetička zamjena: Zamijenimo vrijednosti s a = a + b, zatim b = a − b, pa a = a − b.
  • 🔀 XOR zamjena: Primijenite bitovni XOR operator tri puta kako biste zamijenili cijele brojeve bez prekoračenja.
  • 🧮 Bitna aritmetika: Koristite operatore AND, OR i komplement za reprodukciju zbrajanja i oduzimanjatraction.
  • 🐍 Python prečac: Raspakiranje tuple-a, a, b = b, a, zamjenjuje bilo koje dvije vrijednosti u jednom retku.
  • 🤖 Umjetna inteligencija i podaci: Zamjene tuple-ova i NumPy indeksiranje, promjena redoslijeda elemenata polja u pripremi strojnog učenja.

Zamijenite dva Numbers Bez korištenja treće varijable

U donjim odjeljcima opisana su četiri načina zamjene bez privremene varijable, plus aritmetičko prekoračenje.

U programskim jezicima, zamjenaping znači zamjenu vrijednosti dviju varijabli. Varijabla može sadržavati broj, niz znakova, popis ili niz, objekt itd. Opći način zamjeneping je korištenje privremene varijable za pohranjivanje vrijednosti. Na primjer,

Zamijenite dva Numbers

Opći koraci zamjeneping dva broja su:

  • Deklariraj privremenu varijablu C
  • Dodijelite vrijednost A do C, što znači C = A. Sada je C = 20
  • Dodijelite vrijednost B A, tako da je A = 30
  • Dodijelite vrijednost C B-u, tako da je B = 20, jer C ima vrijednost 20.

Ovako se zamjenjujeping se vrši uz pomoć privremene varijable i radi i za cijele i za brojeve s pomičnim zarezom.

Zamijenite pomoću aritmetičke jednadžbe

Kao što znamo, zamjenaping znači zamijeniti sadržaj dvaju objekata ili polja ili varijabli. Zamjena pomoću aritmetičke operacije znači izvođenje zamjene pomoću matematičke jednadžbe, tj. zbrajanja i oduzimanjatraction.

Ako nam se zadaju dva broja i zatraži se da ih zamijenimo bez korištenja privremene varijable, tada pomoću tri aritmetičke jednadžbe možemo zamijeniti brojeve.

Pseudokod za zamjenuping brojevi pomoću aritmetičke operacije:

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

Pretpostavimo da imamo dva broja, A = 20 i B = 30.

Uvjet 1: A = A+B

Dakle, trenutna vrijednost A je 20 + 30 = 50

Uvjet 2: B = AB

Sada, B = 50-30 = 20
Vidimo da smo dobili vrijednost A u B.

Uvjet 3: A = AB

Konačno, A = 50-20 = 30
A ima početnu vrijednost B.

Dakle, samo smo zamijenili brojeve.

Evo programa za zamjenu dva broja u 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);
}

Izlaz:

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

Programirajte u 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))

Izlaz:

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

sada u Python, ne moramo čak ni izvoditi aritmetičke operacije. Možemo koristiti:

a,b = b,a

Evo demonstracije gdje je a=20, b=30;

Zamijenite pomoću aritmetičke jednadžbe

Zamijenite koristeći bitwise XOR Operahumka

Ova metoda je također poznata kao XOR zamjena. XOR znači isključivo ILI. U ovoj bitnoj operaciji uzimamo dva bita kao ulaze u XOR. Da bismo dobili jedan izlaz iz XOR-a, samo jedan ulaz mora biti 1. Inače će izlaz biti 0. Sljedeća tablica prikazuje izlaz za sve kombinacije ulaza A i B.

Moramo znati kako XOR operacija funkcionira za zamjenu dva broja pomoću bitne operacije. Evo tablice za XOR gdje su A i B ulazne vrijednosti.

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

Ako dva ulaza imaju istu vrijednost, tada XOR operacija daje 0; inače, 1. U ovom primjeru koristit ćemo XOR operaciju s 3 znaka. U većini programskih jezika, XOR se označava kao "^".

Pretpostavimo da je A=4 (u binarnom sustavu = 0100) i B=7 (u binarnom sustavu, 0111)

Uvjet 1: A = A ^ B

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

Sada, A = 0011 (u binarnom obliku).

Uvjet 2: B = A^B

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

Dakle, B = 0100, što je bila početna binarna vrijednost A.

Uvjet 3: A = A^B

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

Konačno, A = 0111, što je bila ekvivalentna binarna vrijednost B.

Program u 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);
}

Izlaz:

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

Programirajte u 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))

Izlaz:

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

Razmijeniti Numbers koristeći Bitwise-Aritmetic

Ova metoda je ista kao aritmetička metoda, ali ćemo koristiti bitovne operacije poput I, ILI i komplementa za izvođenje zbrajanja i oduzimanja.tracPrije nego što prijeđemo na korake, ukratko ćemo pogledati „komplement“.

Komplement 1 znači promjenu svih 0 u 1 i 1 u 0. Uzmimo primjer.

  • Pretpostavimo broj 23, decimalni broj.
  • Pretvaranjem u binarni broj dobivamo 10111. Postoji samo 5 bitova, ali računalo pohranjuje brojeve u 8, 16, 32, 64... bita. Dakle, dodajmo nulu ispred binarnog broja. To neće promijeniti izvornu vrijednost broja. Dakle, postat će 00010111.
  • Kao što znamo, komplement 1 znači promjenu svih 0 u 1 i 1 u 0, pa se komplement 1 izvodi preko 00010111 daje 11101000.

Ovaj komplement jedinice predstavljen je simbolom "~" u većini programskih jezika. Stavljanjem ovog simbola ispred bilo koje cjelobrojne vrijednosti ili vrijednosti s pomičnim zarezom dobit ćete komplement jedinice.

A komplement 2 znači dodavanje binarne “1” komplementu 1. Ako napravimo komplement 2 na gornji broj:

  • Binarno = 00010111
  • 1-ov komplement = 11101000
  • Komplement broja 2:

11101000

+ 1

11101001

Dakle, komplement broja 2 je 11101001. Ovo je binarni broj za -23.
Ukratko, za izvođenje komplementa 2 broja A, izgledat će ovako:

2 komplement od A = (~A) + 1

Sada pretpostavimo da je A=8 (binarno 00001000), B=10 (00001010)

Uvjet 1: A = (A & B) + (A | B)

To je ekvivalentno kao A = A + B.

A & B = 00001000 & 00001010 = 00001000

A | B = 00001000 | 00001010 = 00001010

Sada, 00001000 + 00001010 = 00010010 (decimalno 18)

Dakle, A = 18

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

To je ekvivalentno B = AB

Ovdje je B = A – B

Iz gornje rasprave, ako trebamo izvršiti podtracciju, izvodimo komplement negativnog broja s 2, a zatim ga zbrajamo.

Dakle, -B = ~B + 1

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

B-ova vrijednost je ekvivalentna decimalnom broju 8, što je bila početna vrijednost.

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

To je ekvivalentno A = AB

Sada, A = 00010010 + 11110111 + 1

A = 00001010 (ekvivalent decimalnom broju 10)

Konačno, A je dobio vrijednost B. Dakle, zamjenaping bio dovršen.

Program u 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);
}

Izlaz:

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

Programirajte u 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))

Izlaz:

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

Što je aritmetičko prekoračenje?

Pojam prelijevanja znači prekoračenje granice. Aritmetičko prelijevanje znači da rezultat bilo koje aritmetičke operacije premašuje raspon ili granicu brojevne reprezentacije računalne arhitekture. Na primjer, ako se broj podijeli s nulom, postaje beskonačan i računalni brojevni sustav ga ne može pohraniti u 32 ili 64 bita.

Predstavljanje cijelog broja

Prikaz cjelobrojnih brojeva u 32-bitnom sustavu

Posljedica aritmetičkog preljeva može biti:

  • Zbrajanje dvaju pozitivnih brojeva postaje negativno, jer bi bit predznaka mogao postati 1, što znači negativan broj.
  • Zbrajanje dva negativna broja postaje pozitivno, jer bit predznaka može postati 0, što znači pozitivan broj.

Pitanja i odgovori

XOR zamjenaping je omiljeno na intervjuu: nema dodatne memorije, nema prelijevanja. Aritmetika je poštena rezervna kopija i Python programeri obično samo pišu a, b = b, a.

Ne. Bitovni XOR radi samo na cjelobrojnim bitnim uzorcima, ne na float, double ili pokazivače. Za float koristite raspakiranje tuple-a ili aritmetičku zamjenu.

Ako obje varijable dijele jednu memorijsku lokaciju, XOR zamjenaping postavlja vrijednost na 0. Dodaje provjeru ako je moguće aliasiranje.

Da: a = a * b, b = a / b, a = a / b. Ali ne uspijeva kada je bilo koja vrijednost 0 i gubi se preciznost float broja.

Samo raspakiranje n-torke može. Zapisivanje a, b = b, a zamjenjuje stringove, liste ili objekte. Aritmetički i XOR trikovi su samo za cijele brojeve.

Jedva. Moderni kompajleri već optimiziraju zamjene privremenih varijabli, tako da taj trik rijetko poboljšava brzinu. Readable kod je važniji od spremanja jedne varijable.

Da. Kod strojnog učenja zamjenjuje vrijednosti s Python raspakiranje tuple-a i numpy Indeksiranje poput arr[[i, j]] = arr[[j, i]] zamjenjuje retke polja na mjestima.

Da. GitHub Copilot i slični AI asistenti iz prompta izvode XOR, aritmetičke operacije i zamjene za raspakiranje tuple-ova. Revpregledajte svaki za greške prelijevanja i aliasiranja.

Sažmite ovu objavu uz: