What is the range of the third side of a triangle?

Improve Article

Save Article

Like Article

Given two sides of a triangle s1 and s2, the task is to find the minimum and maximum possible length of the third side of the given triangle. Print -1 if it is not possible to make a triangle with the given side lengths. Note that the length of all the sides must be integers.
Examples: 
 

Input: s1 = 3, s2 = 6 
Output: Max = 8 Min = 4

Input: s1 = 5, s2 = 8 


Output: Max = 12 Min = 4 

Approach: Let s1, s2 and s3 be the sides of the given triangle where s1 and s2 are given. As we know that in a triangle, the sum of two sides must always be greater than the third side. So, the following equations must be satisfied: 
 

  1. s1 + s2 > s3
  2. s1 + s3 > s2
  3. s2 + s3 > s1

Solving for s3, we get s3 < s1 + s2, s3 > s2 – s1 and s3 > s1 – s2
It is clear now that the length of the third side must lie in the range (max(s1, s2) – min(s1, s2), s1 + s2) 
So, the minimum possible value will be max(s1, s2) – min(s1, s2) + 1 and the maximum possible value will be s1 + s2 – 1.Below is the implementation of the above approach: 

#include <iostream>

using namespace std;

void find_length(int s1, int s2)

{

    if (s1 <= 0 || s2 <= 0) {

        cout << -1;

        return;

    }

    int max_length = s1 + s2 - 1;

    int min_length = max(s1, s2) - min(s1, s2) + 1;

    if (min_length > max_length) {

        cout << -1;

        return;

    }

    cout << "Max = " << max_length << endl;

    cout << "Min = " << min_length;

}

int main()

{

    int s1 = 8, s2 = 5;

    find_length(s1, s2);

    return 0;

}

import java.io.*;

class GFG

{

static void find_length(int s1, int s2)

{

    if (s1 <= 0 || s2 <= 0)

    {

        System.out.print(-1);

        return;

    }

    int max_length = s1 + s2 - 1;

    int min_length = Math.max(s1, s2) - Math.min(s1, s2) + 1;

    if (min_length > max_length)

    {

        System.out.print(-1);

        return;

    }

    System.out.println("Max = " + max_length);

    System.out.print("Min = " + min_length);

}

public static void main (String[] args)

{

    int s1 = 8, s2 = 5;

    find_length(s1, s2);

}

}

def find_length(s1, s2) :

    if (s1 <= 0 or s2 <= 0) :

        print(-1, end = "");

        return;

    max_length = s1 + s2 - 1;

    min_length = max(s1, s2) - min(s1, s2) + 1;

    if (min_length > max_length) :

        print(-1, end = "");

        return;

    print("Max =", max_length);

    print("Min =", min_length);

if __name__ == "__main__" :

    s1 = 8;

    s2 = 5;

    find_length(s1, s2);

using System;

class GFG

{

static void find_length(int s1, int s2)

{

    if (s1 <= 0 || s2 <= 0)

    {

        Console.Write(-1);

        return;

    }

    int max_length = s1 + s2 - 1;

    int min_length = Math.Max(s1, s2) - Math.Min(s1, s2) + 1;

    if (min_length > max_length)

    {

        Console.WriteLine(-1);

        return;

    }

    Console.WriteLine("Max = " + max_length);

    Console.WriteLine("Min = " + min_length);

}

public static void Main ()

{

    int s1 = 8, s2 = 5;

    find_length(s1, s2);

}

}

<script>

    function find_length(s1 , s2)

    {

        if (s1 <= 0 || s2 <= 0)

        {

            document.write(-1);

            return;

        }

        var max_length = s1 + s2 - 1;

        var min_length = Math.max(s1, s2) - Math.min(s1, s2) + 1;

        if (min_length > max_length)

        {

            document.write(-1);

            return;

        }

        document.write("Max = " + max_length+"<br/>");

        document.write("Min = " + min_length);

    }

    var s1 = 8, s2 = 5;

    find_length(s1, s2);

</script>

Time Complexity: O(1)

Auxiliary Space: O(1)