пятница, 11 января 2013 г.

Обмен

Как поменять местами значения переменных?
Задачка для программистов, которую любят задавать на собеседованиях. Даны две переменные, например, a=4 и b=7. Требуется поменять местами значения этих переменных (то есть должно получиться a=7 и b=4), но при этом нельзя использовать третью переменную. Нужен алгоритм, который легко реализовать на любом языке.

update
Первые - 67108864 и Roman Zhmakin.
Ответ
Есть несколько вариантов.
С помощью простых арифметических действий, например:
a = a + b;
b = a - b;
a = a - b;
С помощью функции xor (исключающее ИЛИ):
a = a XOR b;
b = a XOR b;
a = a XOR b;

И ещё - предложите самый быстрый алгоритм.

6 комментариев:

  1. есть такая гадость как http://en.wikipedia.org/wiki/XOR_swap_algorithm

    ОтветитьУдалить
    Ответы
    1. XOR универсальнее, в том смысле что в отличие от суммы (Roman Zhmakin) не зависим от знакового переполнения. Даже для вещественных чисел, если их рассматривать как кусок памяти. Иначе есть косяки даже с ассоциативностью и дистрибутивностью.

      Удалить
  2. Есть такой вариант. А без искл или?

    ОтветитьУдалить
  3. Задача-то достаточно известная:
    a=a+b
    b=a-b
    a=a-b

    ОтветитьУдалить