Python Программа для обмена местами двух чисел без использования третьей переменной.

⚡ Умное резюме

Обменping Два числа без третьей переменной меняют свои значения на месте, используя арифметическое сложение и вычитание.tracпобитовый оператор XOR или побитовые арифметические приемы. Python Также возможна прямая замена при распаковке кортежа.

  • 🔘 Классический метод: Обычно при обмене значения в переменной-времени хранится одно значение, чего не позволяют избежать данные методы.
  • Арифметическая перестановка: Поменяйте местами значения: a = a + b, тогда b = a − b, тогда a = a − b.
  • 🔀 XOR-перестановка: Для обмена целых чисел без переполнения примените побитовый оператор XOR три раза.
  • 🧮 Побитовая арифметика: Используйте операторы И, ИЛИ и дополнения для выполнения сложения и вычитания.tracния.
  • 🐍 Python ярлык: Распаковка кортежа, a, b = b, a, меняет местами любые два значения в одной строке.
  • 🤖 Искусственный интеллект и данные: Перестановка кортежей и индексация элементов массива в NumPy при подготовке к машинному обучению.

Обменять два Numbers Без использования третьей переменной

В разделах ниже рассматриваются четыре способа обмена без использования временной переменной, а также арифметическое переполнение.

В языках программирования обменping Обмен значениями означает обмен значениями двух переменных. Переменная может содержать число, строку, список или массив, объект и т. д. Общий способ обмена значениямиping Это использование временной переменной для хранения значений. Например,

Обменять два Numbers

Общие этапы обменаping Это два числа:

  • Объявите временную переменную C.
  • Присвойте значение A значению C, что означает C = A. Теперь C = 20.
  • Присвойте значение B значению A, поэтому A = 30.
  • Присвойте значение C значению B, поэтому B = 20, поскольку C имеет значение 20.

Вот как происходит обменping Это делается с помощью временной переменной и работает как с целыми, так и с числами с плавающей запятой.

Обмен с использованием арифметического уравнения

Как известно, обменping Обмен данными между двумя объектами, полями или переменными означает замену их содержимого. Обмен данными с использованием арифметической операции означает выполнение обмена с помощью математического уравнения, то есть сложения и вычитания.tracния.

Если нам даны два числа и нас просят поменять их местами без использования временной переменной, то, используя три арифметических уравнения, мы можем поменять числа местами.

Псевдокод для обменаping числа, полученные с помощью арифметической операции:

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

Предположим, у нас есть два числа: A = 20 и B = 30.

Состояние 1: А = А+Б

Таким образом, текущее значение A равно 20 + 30 = 50.

Состояние 2: Б = АВ

Теперь Б = 50-30 = 20
Мы видим, что получили значение A в B.

Состояние 3: А = АВ

Наконец, А = 50-20 = 30
A имеет начальное значение B.

Итак, мы просто поменяли номера местами.

Вот программа для обмена двумя числами на языке 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);
}

Выход:

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

Программа в 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))

Выход:

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

Сейчас в PythonНам даже не нужно выполнять арифметические операции. Мы можем использовать:

а, б = б, а

Вот демонстрация, где a=20, b=30;

Обмен с использованием арифметического уравнения

Обмен с использованием побитового XOR Operaтор

Этот метод также известен как операция XOR-перестановки. XOR означает исключающее ИЛИ. В этой побитовой операции мы принимаем два бита в качестве входных данных для операции XOR. Чтобы получить один выходной результат от XOR, только один из входных битов должен быть равен 1. В противном случае выходной результат будет равен 0. В следующей таблице показаны выходные данные для всех комбинаций входных данных A и B.

Нам нужно знать, как работает операция XOR для обмена двух чисел побитовым способом. Вот таблица для операции XOR, где A и B — входные значения.

A B А исключающее ИЛИ Б
0 0 0
0 1 1
1 0 1
1 1 0

Если два входных значения одинаковы, то операция XOR возвращает 0; в противном случае — 1. В этом примере мы будем использовать операцию XOR 3. В большинстве языков программирования операция XOR обозначается как «^».

Предположим, что A=4 (в двоичном представлении = 0100) и B=7 (в двоичном представлении, 0111).

Состояние 1: А = А ^ Б

A 0 1 0 0
B 0 1 1 1
А ^ В 0 0 1 1

Теперь A = 0011 (в двоичном формате).

Состояние 2: Б = А^Б

A 0 0 1 1
B 0 1 1 1
А ^ В 0 1 0 0

Итак, B = 0100, что было начальным двоичным значением A.

Состояние 3: А = А^Б

A 0 0 1 1
B 0 1 0 0
А ^ В 0 1 1 1

Наконец, A = 0111, что было эквивалентным двоичным значением B.

Программа на 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);
}

Выход:

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

Программа в 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))

Выход:

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

Обмен Numbers с использованием побитовой арифметики

Этот метод аналогичен арифметическому, но для сложения и вычитания мы будем использовать побитовые операции, такие как И, ИЛИ и дополнение.tracПрежде чем перейти к шагам, давайте быстро рассмотрим понятие «дополнение».

Дополнительный код означает замену всех нулей на единицы и единиц на нули. Рассмотрим пример.

  • Предположим, у нас есть десятичное число 23.
  • Преобразование в двоичную систему дает нам 10111. В ней всего 5 бит, но компьютер хранит числа в 8, 16, 32, 64… битах. Поэтому добавим ноль перед двоичным числом. Это не изменит исходное значение числа. Таким образом, оно станет 00010111.
  • Как известно, дополнительный код означает замену всех нулей на 1 и единиц на 0, поэтому выполнение дополнительного кода над 00010111 дает 11101000.

Дополнительный код в большинстве языков программирования обозначается символом «~». Помещение этого символа перед любым целочисленным или числом с плавающей запятой даст вам дополнительный код.

А дополнение до 2 означает добавление двоичной «1» к дополнению до 1. Если мы дополним 2 к указанному выше числу:

  • Двоичный = 00010111
  • Дополнительный код = 11101000
  • Дополнительный код:

11101000

+ 1

11101001

Итак, дополнение до 2 равно 11101001. Это двоичный код для -23.
Вкратце, для выполнения дополнения до двух числа А это будет выглядеть так:

Дополнение до 2 к A = (~A) + 1

Теперь предположим, что A=8 (двоичное 00001000), B=10 (00001010).

Состояние 1: А = (А и В) + (А | В)

Это эквивалентно A = A + B.

А и Б = 00001000 и 00001010 = 00001000

А | Б = 00001000 | 00001010 = 00001010

Теперь 00001000 + 00001010 = 00010010 (десятичное 18).

Итак, А = 18

Состояние 2: В = А + (~В) + 1

Это эквивалентно B = AB

Здесь В = А – В

Из вышеизложенного обсуждения следует, что если нам необходимо выполнить подпрограммуtracВ этом случае мы выполняем дополнительное кодирование отрицательного числа, а затем прибавляем к нему полученное значение.

Итак, -B = ~B + 1.

Теперь B = 00010010 + (11110101) + 1 = 00001000

Значение B эквивалентно десятичному числу 8, которое было начальным значением.

Состояние 3: А = А + (~В) + 1

Это эквивалентно A = AB

Теперь А = 00010010 + 11110111 + 1.

A = 00001010 (эквивалент десятичной 10)

В итоге А получил значение В. Таким образом, произошла перестановка.ping было выполнено.

Программа на 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);
}

Выход:

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

Программа в 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))

Выход:

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

Что такое арифметическое переполнение?

Термин «переполнение» означает превышение предела. Арифметическое переполнение означает, что результат любой арифметической операции превышает диапазон или предел представления чисел, используемого в компьютерной архитектуре. Например, если число разделить на ноль, оно станет бесконечным, и компьютерная система счисления не сможет хранить его в 32 или 64 битах.

Представление целочисленного числа

Представление целочисленного числа в 32-битной системе

Последствием арифметического переполнения может быть:

  • Сложение двух положительных чисел приводит к отрицательному результату, поскольку знаковый бит может стать равным 1, что означает отрицательное число.
  • Сумма двух отрицательных чисел становится положительной, поскольку знаковый бит может стать равным 0, что означает положительное число.

Часто задаваемые вопросы (FAQ)

XOR-обменping Наиболее предпочтительный вариант на собеседовании: не требует дополнительной памяти, не вызывает переполнения. Арифметические операции — неплохой резервный вариант, и Python Разработчики обычно просто пишут a, b = b, a.

Нет. Побитовое XOR работает только с целочисленными битовыми шаблонами, а не с числами с плавающей запятой, числами двойной точности или указателями. Для чисел с плавающей запятой используйте распаковку кортежей или арифметическую перестановку.

Если обе переменные занимают одно и то же место в памяти, выполните операцию XOR с обменом местами.ping Устанавливает значение равным 0. Добавьте проверку if всякий раз, когда возможно использование псевдонимов.

Да: a = a * b, b = a / b, a = a / b. Но это приводит к ошибке, когда любое из этих значений равно 0, и теряется точность чисел с плавающей запятой.

Это возможно только при распаковке кортежей. Запись a, b = b, a меняет местами строки, списки или объекты. Арифметические операции и операция XOR выполняются только с целыми числами.

Практически нет. Современные компиляторы уже оптимизируют операции обмена временными переменными, поэтому этот приём редко повышает скорость. Readable Код важнее, чем сохранение одной переменной.

Да. Код машинного обучения меняет местами значения с Python распаковка кортежей и NumPy Индексация типа arr[[i, j]] = arr[[j, i]] меняет местами строки массива.

Да. GitHub Copilot и аналогичные ИИ-помощники выполняют операции XOR, арифметические операции и перестановку кортежей по запросу. RevПроверьте каждый параметр на наличие ошибок переполнения и сглаживания.

Подведем итог этой публикации следующим образом: