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
  • xor: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())

どちらの場合も、出力は明らかに「フレッド」です。私が面接したのなら、これが私が探している答えです。

于 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(^)を使用して、ある数値のビットを変更できます。たとえば、任意の数の最後の2ビットを変更する場合(のようxxxx10に) 、3はバイナリ00011であるため、xxxx01これを使用できます。numbrer ^ 3

XORに関するいくつかの事実があります

  1. XORは対称です-> a^b=b^a

  2. XORは連想的です-> (a^b)^c=a^(b^c)

  3. a^a= 0(の1つはaゼロに置き換えられ、ゼロは変更されません)

    a = 157の例(バイナリ010011101)

      010011101
    ^ 010011101
    -----------
      000000000
    
  4. 0^a= a(の1つはaゼロのみを変更できるため、1に変更されます)

      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 に答える