Напрягай мозги!
Posted May.10, 2009 in Общая
Юра Зновьяк сегодня подкинул забавную задачку. Цитирую:
Interview question: f(f(n)) == -n
Design a function f, such that:
f(f(n)) == -n
Where n is a 32 bit signed integer; you can’t use complex numbers arithmetic.
If you can’t design such a function for the whole range of numbers, design it for the largest range possible.
В двух словах: нужно написать int f(int n) {…} такую что f(f(n))==-n.
Я написал для всего диапазона int, кроме 3х чисел. Мне понадобилась 2 минуты чтобы придумать и минуты 3 чтобы закодить. А ты?
Tags: задачи, программирование

May 10th, 2009 on 14:38
просьба в комментах не писать решение и подсказки =)
May 10th, 2009 on 16:14
а я слишком далёкая для решения %-)
May 11th, 2009 on 21:48
в моей функции выполнялось f(f(n)) == -n для всех чисел диапазона, кроме одного…
правда, конечно, я додумался до неё не за 3 минуты, а за пару часов =)
May 12th, 2009 on 20:57
о-кей. поскольку, было уточнено, что f(f(n)) == -n проверяется математическим путём (нельзя опираться на особенности компилятора при этой проверке) то моё решение будет работать для всего диапазона, кроме двух чисел.
May 12th, 2009 on 21:13
итак, новая ставка – кроме двух чисел. кто меньше? =)
May 12th, 2009 on 14:02
Сходу придумал два варианта. Но оба, что называется, “в лоб”. А вот алгоритмическое какое-то решение существует?
May 12th, 2009 on 14:08
ээ. а теперь подумал. второй вариант — частный случай первого %)
но вопрос остаётся в силе.
May 12th, 2009 on 14:13
а что значит алгоритмическое? один return и несколько условий – вряд ли можно назвать алгоритмом =) а иначе оно не решается, по крайней мере не нужно.