#c #variables
#c #переменные
Вопрос:
Так, например, x = a, y = b было бы нормально, в основном проверяя, являются ли a и b элементами {x, y, z}. Для x, y, z, a, b все целые числа в c . Как бы я вообще подошел к такой проблеме элегантным способом? Мой текущий способ — это множество предложений if…
Ответ №1:
Я вижу только самый простой подход:
if (((a==x) || (a==y) || (a==z)) amp;amp;
((b==x) || (b==y) || (b==z)))
...
Может быть интересно понять, что большинство компиляторов оптимизированы, поэтому представьте, что a==x
действительно, следующие части OR
-предложения не будут выполнены, что true || whatever || whatever
дает true
.
Очевидно, что мой ответ основан на предположении (как вы написали), что есть только три значения ( x
, y
и z
) для сравнения. В случае, если их больше, например, несколько десятков или сотен или даже больше, вы можете поместить их в отсортированную коллекцию и выполнить некоторый двоичный поиск, но это выходит за рамки этого ответа.
Ответ №2:
Вы можете отсортировать x, y, z и a,b. Тогда вам нужно проверить только три случая: a== x amp;amp; b ==y; a==x amp;amp; b ==z; a== y amp;amp; b == z; Я не вижу более элегантного способа сделать это.
Комментарии:
1. А что, если a== z и b ==x?
2. Вы отсортировали x, y, z и a, b, так что вы знаете, что a <= b и x <= y <= z . Если бы a было равно z, а b равно x, это означало бы, что x == y ==z, и вы нашли бы ответ в одном из случаев, которые мы проверяем.
3. Может быть, и так, но сортировка требует производительности, конечно, если вы делаете это общим способом. Поместите это в некоторые циклы for, и постоянная сортировка может привести к серьезным потерям производительности.