闲来无事刷刷微博,无意中看到了一道面试题目,拿来与大家分享分享。
题目是这样的,让你构造一个函数f(n)使得f(f(n))=-n。
开始想了半天,没想明白,琢磨了好一阵子,居然想去递归了,其实听简单的一道题目,技巧时就是利用基偶数。因为最后的结果要是-n,所以对于函数f来说,首先一点是这个函数绝对不能对数字n进行很大的处理,要不然没法还原了。所以将数字基变偶,偶变基。正变负,负变正,当然只能2次变化总只能出现一次,否则就不能得到结果了。
代码如下:
int f(int x)
{
if(x==0)
return 0;
if(x>0)
{
if(x%2)//偶数变基数,然后基数加1取反
return x-1;
else
return -x-1;
}
else
{
if(-x%2)//同理
return x+1;
else
return -x+1;
}
}