Как лучше можно сделать условие на проверку какой это треугольник

Я написал условия на проверку. Какой это треугольник. Можется подсказать как лучше написать это условие чтобы оно выглядело не таким громоздким

if ((side_1 + side_2 <= side_3) || (side_1 + side_3 <= side_2) || (side_2 + side_3 <= side_1))
{
    // Это не треугольник!
}
else 
if ((side_1 == side_2) && (side_2 == side_3))
{
    // Это равносторонний треугольник!
}
else 
if (((side_1 == side_2) && (side_2 != side_3)) || ((side_1 == side_3) && (side_2 != side_3)) || ((side_2 == side_3) && (side_1 != side_3)))
{
    // Это равнобедренный треугольник!
}

Ответы (2 шт):

Автор решения: aepot

Здесь особо никакой магии, супероптимизацию не придумать, но можно причесать код:

  • Переменные назвать покороче, в данном конкретном случае, стороны треугольника можно обозвать A, B и C.
  • Скобки в условиях можно убрать if ((a == b) && (b == c)) содержит лишние скобки, можно так if (a == b && b == c).
  • Так как вы уже проверили, равносторонний это треугольник или нет, и перешли к проверке равнобедренного, то одна сторона у вас точно как минимум не равна двум другим, следовательно и проверку лишнюю выполнять не нужно.

Я проверил код на консольном приложении, получилось вот так:

static void Main(string[] args)
{
    int a = ReadPositiveNumber("Введите a = ");
    int b = ReadPositiveNumber("Введите b = ");
    int c = ReadPositiveNumber("Введите c = ");

    if (a + b <= c || a + c <= b || b + c <= a)
        Console.WriteLine("Это не треугольник!");
    else if (a == b && b == c)
        Console.WriteLine("Это равносторонний треугольник!");
    else if (a == b || a == c || b == c)
        Console.WriteLine("Это равнобедренный треугольник!");
    else
        Console.WriteLine("Это треугольник.");
    Console.ReadKey();
}

private static int ReadPositiveNumber(string prompt)
{
    while (true)
    {
        Console.Write(prompt);
        if (int.TryParse(Console.ReadLine(), out int number) && number > 0)
            return number;
        Console.WriteLine("Некорректный ввод, введите натуральное число.");
    }
}

Кстати да, на этапе ввода я уже проверяю, что пользователь ввел натуральное число. Если у вас этой проверки нет, то ее нужно добавить.

→ Ссылка
Автор решения: Qwertiy
if (a + b <= c || a + c <= b || b + c <= a)
  return "Не треугольник";

if (a == b && b == c)
  return "Равносторонний";

if (a == b || b == c || a == c)
  return "Равнобедренный";

return "Обычный";

Если хочется минимизировать число сравнений (хотя почти наверняка смысла нет):

if (a == b)
  if (b == c)
    return "Равносторонний";
  else if (a + b <= c)
    return "Не треугольник";
  else
    return "Равнобедренный";

if (a == c)
  if (a + c <= b)
    return "Не треугольник";
  else
    return "Равнобедренный";

if (b == c)
  if (b + c <= a)
    return "Не треугольник";
  else
    return "Равнобедренный";

return "Обычный";
→ Ссылка