设计一个函数,实现如下功能:

f(f(n)) = -n

n为32位符号数,也就是int型数据。任何语言实现都可以

这好像是一个纯数学问题。。有什么好的主意么?

推荐图书

  • 编程珠玑(第2版)


 
wow,竟然找不到入手的地方! –  xuesong 7年前  
wow,竟然找不到入手的地方!
 
要是可以用虚数就好啦,这个一下子想不出来~ –  Alan.Tan 7年前  
要是可以用虚数就好啦,这个一下子想不出来~
 
这个确实有点难。。晚上好好想想 –  那一世 7年前  
这个确实有点难。。晚上好好想想
 
刚开始想歪了,老想从反函数的角度入手。 –  xuesong 7年前  
刚开始想歪了,老想从反函数的角度入手。

4个回答

C#:

static double F(double n)
{
    if (n == 0) return 0;

    if (n < 0)
        return ((long)Math.Ceiling(n) % 2 == 0) ? (n + 1) : (-1 * (n - 1));
    else
        return ((long)Math.Floor(n) % 2 == 0) ? (n - 1) : (-1 * (n + 1));
}

从数学推导了一下,函数应该的数学表达式:

f(n) = sgn(n) - (-1)^n * n

上面这个数学表达式对于int数据都没有问题,double的话需要预处理:

ceiling(n) if n>0; 
floor(n) if n<0;

 
参数不对吧?应该是int,而不是double型 –  xuesong 7年前  
参数不对吧?应该是int,而不是double型
 
函数没有问题的,下面的说明是针对函数的数学表达式的说明,可能我没有说清楚,修改一下~ –  Alan.Tan 7年前  
函数没有问题的,下面的说明是针对函数的数学表达式的说明,可能我没有说清楚,修改一下~
 
@Alan,你的意思是你的F函数是下面表达式中的sgn函数? –  xuesong 7年前  
@Alan,你的意思是你的F函数是下面表达式中的sgn函数?
 
@xuesong不是的,F函数就是满足f(f(n)) = -n –  Alan.Tan 7年前  
@xuesong不是的,F函数就是满足f(f(n)) = -n

写个python的:

def f(n): 
    if n == 0: return 0
    if n >= 0:
        if n % 2 == 1: 
            return n + 1
        else: 
            return -1 * (n - 1)
    else:
        if n % 2 == 1:
            return n - 1
        else:
            return -1 * (n + 1)

赞成 3 反对
+50

c++可以使用重载来实现。

double f(int var)
{
    return double(var);
} 

int f(double var)
{
    return -int(var);
}

c代码,用一个静态变量:

int f(int n) {
    static int state = -1;
    state *= -1;

    return n * state;
}