计算的前身和后继者

Computing Predecessor and Successor

我遇到了一个有趣的问题,我想讨论一下,看看不同的人会如何处理它:

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

你可以这样做:

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

因为

(n % 2) == 0 如果 2 除 nf(n) = n + 1 - 0

(n % 2) == 1 如果 2 不整除 n 因此 f(n) = n + 1 - 2 = n - 1