在不使用条件的情况下返回2个可能参数的另一个参数

dav*_*gri 42 java

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

我在接受采访时被问到这个问题并且非常难过,谢谢.

Sim*_*erg 94

简单算术:

return 7 - input + 5;

(可以简化为return 12 - input;)

假设输入为7:

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

或者如果输入为5:

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

  • +1,即使`返回12 - 输入` (16认同)
  • @PremGenError这并不奇怪,这是数学!哪个......当然有时候会非常惊人:) (15认同)
  • 不,只是数学;) (6认同)

adi*_*tsu 71

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

  • 加成: f(x)=7+5-x
  • XOR: f(x)=7^5^x
  • 乘法: f(x)=7*5/x

  • 当且仅当_a_和_b_(而不是_5_和_7_)都非零时,请注意您可以概括乘法方法. (3认同)
  • xor的反转也是xor.在每个示例中,x将取消其中一个术语,而将另一个作为结果. (2认同)

Ski*_*ead 33

public int f(int x) {
    return x ^ 2;
}
Run Code Online (Sandbox Code Playgroud)

二进制:

7 = 111
5 = 101
2 = 010
Run Code Online (Sandbox Code Playgroud)

XOR(在java中为^)如果打开则关闭2位,如果打开则关闭.

  • 这与我的第二个例子基本相同,因为2 = 7 ^ 5 (5认同)
  • x ^ 2就够了:) (2认同)

キキジ*_*キジキ 14

怎么样:

public int q(int in)
{
    static final int[] ret = {0, 0, 0, 0, 0, 7, 0, 5};
    return ret[in];
}
Run Code Online (Sandbox Code Playgroud)


Rya*_*art 10

如果我是一次面试并且你只是为数字输入解决了它,我的下一个问题就是"你如何解决这个非数字输入的问题?" 因为我不会寻找数学上的聪明.相反,这个怎么样?

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

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

println((["bob", "fred"] - "bob").first())
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,输出显然都是"fred".如果我是一个面试,这就是我要找的答案.

  • 我很确定remove()使用了一个条件,但我不确定是否会违反规则 (8认同)
  • 我喜欢这个答案,但我对"不使用任何条件"的解释不允许使用使用条件的方法. (2认同)

SRE*_*ITH 8

public int xyz(int x) {
    return 35 / x;
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然接受的答案是好的,但我更喜欢这个,因为我不会考虑它.我马上想到`7 MOD输入+ 5` :) (2认同)

Psh*_*emo 7

xor如何工作?[对于案例f(x)= 7 ^ 5 ^ x]

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

a|b|a^b
-------
0|0| 0
0|1| 1
1|0| 1
1|1| 0
Run Code Online (Sandbox Code Playgroud)

因此,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
    
    Run Code Online (Sandbox Code Playgroud)
  4. 0^a= a(那些a只能改变零,所以他们会改变为1)

      000000000
    ^ 010011101
    -----------
      010011101
    
    Run Code Online (Sandbox Code Playgroud)

所以使用事实(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
Run Code Online (Sandbox Code Playgroud)

同样的事情发生x=5

(x^5)^7 = (5^5)^7 = 0^7 = 7
Run Code Online (Sandbox Code Playgroud)