Я не вижу, как вы можете уменьшить количество тестов, для которых вы должны кодировать, но вы можете улучшить время выполнения, внедрив простой двоичный поиск, который уменьшает количество тестов, которые вы на самом деле тестируете.
Если это всегда так, что один из A < B < C
или A > B > C
имеет значение true, тогда вы вдвое уменьшите число тестов простой проверкой, чтобы убедиться, что A < B
. Затем вы можете уточнить это далее:
if (A < B)
{
if (X < B)
{
if (X < A)
{
// do something
}
else if (X == A)
{
// do something
}
else // A < X < B
{
// do something
}
}
else if (X < C)
{
if (X == B)
{
// do something
}
else // B > X < C
{
// do something
}
}
else if (X == C)
{
// do something
}
else // X > C
{
// do something
}
}
else // A > B > C
{
// similar logic as above
}
Немного грязно, но меньше сравнений и, вероятно, немного быстрее, хотя это вряд ли будет иметь большое практическое значение.
Вы можете устранить дублирующиеся логи c для случая A > B > C
, написав функцию f(x, a, b, c)
, а для случая A > B > C
вызовите ее с обратными параметрами A
, B
и C
. После этого вам придется изменить возвращаемый результат, но это достаточно простое отображение.