43

例如,如果我有一个保证接收 5 或 7 作为参数的函数,我希望函数在接收到 7 时返回 5,如果在不使用任何条件的情况下接收到 5 时返回 7。

面试时被问到这个问题,非常困惑,谢谢。

4

7 回答 7

96

简单的算术:

return 7 - input + 5;

(可以简化为return 12 - input;

假设输入为 7:

返回 7 - 7 + 5 --> 返回 5

或者如果输入是 5:

返回 7 - 5 + 5 --> 返回 7

于 2013-02-24T20:39:22.387 回答
73

您可以使用任何可以反转的简单交换计算:

  • 添加:f(x)=7+5-x
  • 异或:f(x)=7^5^x
  • 乘法:f(x)=7*5/x
于 2013-02-24T20:43:01.323 回答
34
public int f(int x) {
    return x ^ 2;
}

二进制:

7 = 111
5 = 101
2 = 010

XOR(Java 中的 ^)在关闭时翻转 2 位,如果打开则关闭。

于 2013-02-24T20:41:46.113 回答
15

怎么样:

public int q(int in)
{
    static final int[] ret = {0, 0, 0, 0, 0, 7, 0, 5};
    return ret[in];
}
于 2013-02-25T09:22:50.073 回答
10

如果我是面试的人,而你只为数字输入解决了这个问题,那么我的下一个问题将是,“对于非数字输入,你将如何解决这个问题?” 因为我不会寻找数学上的聪明才智。相反,这个怎么样?

List<String> options = new ArrayList<>(Arrays.asList("bob", "fred"));
options.remove("bob");
System.out.println(options.get(0));

这显然可以很容易地适应任何类型,包括Object,只要对象的相等性正确运行,并且作为奖励,它可以用其他语言更简洁地表达,例如 Groovy:

println((["bob", "fred"] - "bob").first())

无论哪种情况,输出显然都是“fred”。如果我是面试的人,这就是我要寻找的答案。

于 2013-02-24T21:15:13.827 回答
8
public int xyz(int x) {
    return 35 / x;
}
于 2013-02-25T10:08:51.773 回答
7

xor one 是如何工作的?[对于情况 f(x) = 7^5^x ]

XOR (^) 是异或,以这种方式工作

a|b|a^b
-------
0|0| 0
0|1| 1
1|0| 1
1|1| 0

因此 XOR (^) 可用于更改某个数字的位。例如,当我们想要更改任何数字的最后两位(例如)时xxxx10xxxx01我们可以这样做,numbrer ^ 3因为 3 是二进制 00011。

以下是关于 XOR 的一些事实

  1. XOR 是对称的 -> a^b=b^a

  2. XOR 是关联的 -> (a^b)^c=a^(b^c)

  3. a^a= 0(里面的a将被零替换,零不会改变)

    例如 a = 157(二进制 010011101)

      010011101
    ^ 010011101
    -----------
      000000000
    
  4. 0^a= a(其中的a只能更改零,因此它们会将它们更改为一)

      000000000
    ^ 010011101
    -----------
      010011101
    

所以使用事实(1)和(2)7^5^x == x^7^5 == x^5^7

让我们尝试检查如何x^7^5工作x=7

(x^7)^5 = (7^7)^5 = 0^5 = 5

同样的情况发生x=5

(x^5)^7 = (5^5)^7 = 0^7 = 7
于 2013-02-24T21:22:12.493 回答