Решил продолжить цикл статей посвящённых решению типовых задач по программированию.
Постановка данной задачи ясна уже из её названия.
Эта задача является одной из наиболее часто встречающихся. Но, в тоже время почему-то у многих она вызывает трудности, несмотря на то, что она решается элементарно.
Способ 1. Использование битовых операций (исключающего «или»)
Для Delphi и других языков семейства Pascal:
1 2 3 |
a := a xor b; b := b xor a; a := a xor b; |
1 2 3 |
a = a ^ b; b = b ^ a; a = a ^ b; |
Способ 2.Использование арифметических операций
Данный способ реализуется везде одинаково:
1 2 3 |
a = a + b; b = a - b; a = a - b |
1 |
a = a + b - (b = a); |
Способ 3. Использование кортежей
К сожалению, корректное для всех случаев решение данной задачи таким способом возможно только в некоторых языках программирования. Например, в Python:
1 |
a,b = b,a |
1 2 |
tuple < int,int > tuple= new Tuple<int,int>(2, 3); tuple = new Tuple<int, int>(tuple.Item2, tuple.Item1); |
Если целочисленные значения участвуют непосредственно в инициализации кортежа, как в приведённом примере, такой подход ещё можно условно назвать корректным. В остальных случаях кортеж становится вспомогательной (третьей) переменной и такое решение уже не соответствует постановке задачи.
Мы рассмотрели три способа решить задачу обмена значениями двух целочисленных переменных без использования третьей. Очевидно, что её решение действительно не представляет собой ничего сложного и доступно даже для начинающего программиста.
Добавить комментарий