2016-12-30 5 views
0

я наткнулся на интересный вопрос, и я хочу, чтобы обсудить его, чтобы посмотреть, как она будет подходить разными людьми:Computing Предшественник и Преемник

Пусть n натуральное число, задача состоит в том, чтобы реализовать функцию f так что

f(n) = n + 1 if 2 divides n 
f(n) = n - 1 if 2 does not divide n 

Состояние: реализация не должны использовать условные конструкции


Отвечу f(n) = n xor 1

+0

'Я [пришел] по интересному вопросу' 'задача' 'Моя [решение] -' 'Я хочу обсудить [проблему]' вы представляете подход, основанный на распространенном двоичном представлении целых чисел, [Keyvan ] (http://stackoverflow.com/a/41403061/3789665), основанный на арифметических операциях. Пожалуйста, укажите, что вы хотите обсудить. Если возможно, задайте вопрос, на который можно ответить. – greybeard

+0

Я хочу обсудить различные способы решения проблемы. Вы видели мой подход, подход Киева. У вас есть идея, как решить эту проблему по-другому? –

+0

'[Что есть идеи], как решить эту проблему по-другому?' Не комментируйте комментарии, запрашивая дополнительную информацию или пояснения: отредактируйте свой пост. 'Вы видели мой подход, подход @Keiwan' Как вы читаете« вы представляете подход, основанный на распространенном двоичном представлении целочисленных чисел, Keyvan на основе арифметических операторов »? Как я мог описать их, не увидев их? – greybeard

ответ

1

Вы можете сделать:

f(n) = n + 1 - 2 * (n % 2) 

потому

(n % 2) == 0 если 2 делит n и поэтому f(n) = n + 1 - 0 и

(n % 2) == 1 если 2 не делит n и поэтому f(n) = n + 1 - 2 = n - 1

Смежные вопросы