Ответ 1
Простая арифметика:
return 7 - input + 5;
(который можно упростить как return 12 - input;
)
Скажем, что вход равен 7:
return 7 - 7 + 5 → return 5
Или, если вход 5:
return 7 - 5 + 5 → return 7
Например, если у меня есть функция, которая гарантированно получит 5 или 7 в качестве аргумента, я хочу, чтобы функция возвращала 5, если они были получены 7 и 7, если они получены 5 без каких-либо условий.
Меня попросили это в интервью и были довольно тупо, спасибо.
Простая арифметика:
return 7 - input + 5;
(который можно упростить как return 12 - input;
)
Скажем, что вход равен 7:
return 7 - 7 + 5 → return 5
Или, если вход 5:
return 7 - 5 + 5 → return 7
Вы можете использовать любой простой коммутативный расчет, который можно отменить:
f(x)=7+5-x
f(x)=7^5^x
f(x)=7*5/x
public int f(int x) {
return x ^ 2;
}
В двоичном формате:
7 = 111
5 = 101
2 = 010
XOR (^ в java) переворачивает 2-х бит, если он выключен и выключен, если он включен.
Как насчет:
public int q(int in)
{
static final int[] ret = {0, 0, 0, 0, 0, 7, 0, 5};
return ret[in];
}
Если бы я был собеседованием, и вы решили его только для ввода цифр, мой следующий вопрос был бы следующим: "Как бы вы решили эту проблему для нечислового ввода?" потому что я бы не искал математической хитрости. Вместо этого, как насчет этого?
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". Если бы я был одним из собеседований, это тот ответ, который я бы искал.
public int xyz(int x) {
return 35 / x;
}
Как работает xor? [для случая f (x) = 7 ^ 5 ^ x]
XOR (^) является исключительным OR и работает таким образом
a|b|a^b
-------
0|0| 0
0|1| 1
1|0| 1
1|1| 0
Итак, XOR (^) можно использовать для изменения битов некоторого числа. Например, если мы хотим изменить последние два бита любого числа (например, от xxxx10
до xxxx01
), мы можем сделать это с помощью numbrer ^ 3
, так как 3 является двоичным 00011.
Вот несколько фактов о XOR
a^b
= b^a
(a^b)^c
= a^(b^c)
a^a
= 0
(единицы в a
будут заменены нулями, а нули не будут изменены)
пример для a = 157 (двоичный код 010011101)
010011101
^ 010011101
-----------
000000000
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