# Print triplets with sum less than k

Given an array of distinct integers and a sum value. Print all triplets with sum smaller than given sum value. Expected Time Complexity is O(n2).

Examples:

```Input : arr[] = {-2, 0, 1, 3}
sum = 2.
Output : (-2, 0, 1)
(-2, 0, 3)
Explanation :  The two triplets have sum less than 2.

Input : arr[] = {5, 1, 3, 4, 7}
sum = 12.
Output : (1, 3, 4)
(1, 3, 5)
(1, 3, 7)
(1, 4, 5)
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

A Simple Solution is to run three loops to consider all triplets one by one. For every triplet, compare the sums and print current triplet if its sum is smaller than given sum.

## C++

 `// A Simple C++ program to count triplets with sum ` `// smaller than a given value ` `#include ` `using` `namespace` `std; ` ` `  `int` `printTriplets(``int` `arr[], ``int` `n, ``int` `sum) ` `{ ` `    ``// Fix the first element as A[i] ` `    ``for` `(``int` `i = 0; i < n-2; i++) ` `    ``{ ` `       ``// Fix the second element as A[j] ` `       ``for` `(``int` `j = i+1; j < n-1; j++) ` `       ``{ ` `           ``// Now look for the third number ` `           ``for` `(``int` `k = j+1; k < n; k++) ` `               ``if` `(arr[i] + arr[j] + arr[k] < sum) ` `                  ``cout << arr[i] << ``", "` `<< arr[j]  ` `                       ``<< ``", "` `<< arr[k] << endl;  ` `       ``} ` `    ``} ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``int` `arr[] = {5, 1, 3, 4, 7}; ` `    ``int` `n = ``sizeof` `arr / ``sizeof` `arr; ` `    ``int` `sum = 12; ` `    ``printTriplets(arr, n, sum); ` `    ``return` `0; ` `} `

## Java

 `// A Simple Java program to  ` `// count triplets with sum  ` `// smaller than a given value ` `import` `java.io.*; ` ` `  `class` `GFG  ` `{ ` `static` `int` `printTriplets(``int` `arr[], ` `                         ``int` `n, ``int` `sum) ` `{ ` `    ``// Fix the first ` `    ``// element as A[i] ` `    ``for` `(``int` `i = ``0``; i < n - ``2``; i++) ` `    ``{ ` `         `  `    ``// Fix the second  ` `    ``// element as A[j] ` `    ``for` `(``int` `j = i + ``1``;  ` `             ``j < n - ``1``; j++) ` `    ``{ ` `        ``// Now look for  ` `        ``// the third number ` `        ``for` `(``int` `k = j + ``1``; k < n; k++) ` `            ``if` `(arr[i] + arr[j] + arr[k] < sum) ` `                ``System.out.println(arr[i] + ``", "` `+  ` `                                   ``arr[j] + ``", "` `+  ` `                                   ``arr[k]);  ` `    ``} ` `    ``} ` `    ``return` `0``; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main (String[] args) ` `{ ` `    ``int` `arr[] = {``5``, ``1``, ``3``, ``4``, ``7``}; ` `    ``int` `n = arr.length; ` `    ``int` `sum = ``12``; ` `    ``printTriplets(arr, n, sum); ` `} ` `} ` ` `  `// This code is contributed ` `// by anuj_67. `

## Python3

 `# A Simple python 3 program to count  ` `# triplets with sum smaller than a  ` `# given value ` ` `  `def` `printTriplets(arr, n, ``sum``): ` `     `  `    ``# Fix the first element as A[i] ` `    ``for` `i ``in` `range``(``0``, n ``-` `2``, ``1``): ` `         `  `        ``# Fix the second element as A[j] ` `        ``for` `j ``in` `range``(i ``+` `1``, n ``-` `1``, ``1``): ` `             `  `            ``# Now look for the third number ` `            ``for` `k ``in` `range``(j ``+` `1``, n, ``1``): ` `                ``if` `(arr[i] ``+` `arr[j] ``+` `arr[k] < ``sum``): ` `                    ``print``(arr[i], ``","``, arr[j], ``","``, arr[k]) ` `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``arr ``=``[``5``, ``1``, ``3``, ``4``, ``7``] ` `    ``n ``=` `len``(arr) ` `    ``sum` `=` `12` `    ``printTriplets(arr, n, ``sum``) ` `     `  `# This code is contributed by ` `# Sahil_Shelangia `

## C#

 `// A Simple C# program to  ` `// count triplets with sum  ` `// smaller than a given value ` `using` `System; ` `class` `GFG  ` `{ ` `static` `int` `printTriplets(``int``[] arr, ` `                        ``int` `n, ``int` `sum) ` `{ ` `    ``// Fix the first ` `    ``// element as A[i] ` `    ``for` `(``int` `i = 0; i < n - 2; i++) ` `    ``{ ` `         `  `    ``// Fix the second  ` `    ``// element as A[j] ` `    ``for` `(``int` `j = i + 1;  ` `            ``j < n - 1; j++) ` `    ``{ ` `        ``// Now look for  ` `        ``// the third number ` `        ``for` `(``int` `k = j + 1; k < n; k++) ` `            ``if` `(arr[i] + arr[j] + arr[k] < sum) ` `                ``Console.WriteLine(arr[i] + ``", "` `+  ` `                                ``arr[j] + ``", "` `+  ` `                                ``arr[k]);  ` `    ``} ` `    ``} ` `    ``return` `0; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main () ` `{ ` `    ``int``[] arr = {5, 1, 3, 4, 7}; ` `    ``int` `n = arr.Length; ` `    ``int` `sum = 12; ` `    ``printTriplets(arr, n, sum); ` `} ` `} ` ` `  `// This code is contributed ` `// by Mukul Singh. `

## PHP

 ` `

Output:

```5, 1, 3
5, 1, 4
1, 3, 4
1, 3, 7
```

Time complexity of above solution is O(n3).

An Efficient Solution can print triplets in O(n2) by sorting the array first, and then using method 1 of this post in a loop.

```1) Sort the input array in increasing order.
2) Initialize result as 0.
3) Run a loop from i = 0 to n-2.  An iteration of this loop
finds all triplets with arr[i] as first element.
a) Initialize other two elements as corner elements
of subarray
arr[i+1..n-1], i.e., j = i+1 and k = n-1
b) Move j and k toward each other until they meet,
i.e., while (j = sum), then do k--

// Else for current i and j, there are (k-j) possible
// third elements that satisfy the constraint.
(ii) Else print elements from j to k```

Below is the implementation of above idea.

## C++

 `// C++ program to print triplets with sum smaller ` `// than a given value ` `#include ` `using` `namespace` `std; ` ` `  `int` `printTriplets(``int` `arr[], ``int` `n, ``int` `sum) ` `{ ` `    ``// Sort input array ` `    ``sort(arr, arr + n); ` ` `  `    ``// Every iteration of loop counts triplet with ` `    ``// first element as arr[i]. ` `    ``for` `(``int` `i = 0; i < n - 2; i++) { ` ` `  `        ``// Initialize other two elements as corner ` `        ``// elements of subarray arr[j+1..k] ` `        ``int` `j = i + 1, k = n - 1; ` ` `  `        ``// Use Meet in the Middle concept ` `        ``while` `(j < k) { ` ` `  `            ``// If sum of current triplet is more or equal, ` `            ``// move right corner to look for smaller values ` `            ``if` `(arr[i] + arr[j] + arr[k] >= sum) ` `                ``k--; ` ` `  `            ``// Else move left corner ` `            ``else` `{ ` ` `  `                ``// This is important. For current i and j, ` `                ``// there are total k-j third elements. ` `                ``for` `(``int` `x = j + 1; x <= k; x++) ` `                    ``cout << arr[i] << ``", "` `<< arr[j] ` `                         ``<< ``", "` `<< arr[x] << endl; ` `                ``j++; ` `            ``} ` `        ``} ` `    ``} ` `} ` ` `  `// Driver program ` `int` `main() ` `{ ` `    ``int` `arr[] = { 5, 1, 3, 4, 7 }; ` `    ``int` `n = ``sizeof` `arr / ``sizeof` `arr; ` `    ``int` `sum = 12; ` `    ``printTriplets(arr, n, sum); ` `    ``return` `0; ` `} `

## Java

 `// Java program to print ` `// triplets with sum smaller ` `// than a given value ` `import` `java.util.*; ` `import` `java.lang.*; ` `import` `java.io.*; ` ` `  `class` `GFG ` `{ ` `static` `void` `printTriplets(``int` `arr[], ` `                          ``int` `n, ``int` `sum) ` `{ ` `    ``// Sort input array ` `    ``Arrays.sort(arr); ` ` `  `    ``// Every iteration of loop ` `    ``// counts triplet with ` `    ``// first element as arr[i]. ` `    ``for` `(``int` `i = ``0``; i < n - ``2``; i++)  ` `    ``{ ` ` `  `        ``// Initialize other two elements ` `        ``//  as corner elements of subarray ` `        ``// arr[j+1..k] ` `        ``int` `j = i + ``1``, k = n - ``1``; ` ` `  `        ``// Use Meet in the  ` `        ``// Middle concept ` `        ``while` `(j < k)  ` `        ``{ ` ` `  `            ``// If sum of current triplet  ` `            ``// is more or equal, move right  ` `            ``// corner to look for smaller values ` `            ``if` `(arr[i] + arr[j] + arr[k] >= sum) ` `                ``k--; ` ` `  `            ``// Else move left corner ` `            ``else` `            ``{ ` ` `  `                ``// This is important. For  ` `                ``// current i and j, there  ` `                ``// are total k-j third elements. ` `                ``for` `(``int` `x = j + ``1``; x <= k; x++) ` `                    ``System.out.println(arr[i] + ``", "` `+  ` `                                       ``arr[j] + ``", "` `+  ` `                                       ``arr[x]); ` `                ``j++; ` `            ``} ` `        ``} ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``int` `arr[] = { ``5``, ``1``, ``3``, ``4``, ``7` `}; ` `    ``int` `n = arr.length; ` `    ``int` `sum = ``12``; ` `    ``printTriplets(arr, n, sum); ` `} ` `} ` ` `  `// This code is contributed ` `// by Subhadeep `

## C#

 `// C# program to print ` `// triplets with sum smaller ` `// than a given value ` `using` `System; ` ` `  `class` `GFG ` `{ ` `static` `void` `printTriplets(``int``[] arr, ` `                        ``int` `n, ``int` `sum) ` `{ ` `    ``// Sort input array ` `    ``Array.Sort(arr); ` ` `  `    ``// Every iteration of loop ` `    ``// counts triplet with ` `    ``// first element as arr[i]. ` `    ``for` `(``int` `i = 0; i < n - 2; i++)  ` `    ``{ ` ` `  `        ``// Initialize other two elements ` `        ``// as corner elements of subarray ` `        ``// arr[j+1..k] ` `        ``int` `j = i + 1, k = n - 1; ` ` `  `        ``// Use Meet in the  ` `        ``// Middle concept ` `        ``while` `(j < k)  ` `        ``{ ` ` `  `            ``// If sum of current triplet  ` `            ``// is more or equal, move right  ` `            ``// corner to look for smaller values ` `            ``if` `(arr[i] + arr[j] + arr[k] >= sum) ` `                ``k--; ` ` `  `            ``// Else move left corner ` `            ``else` `            ``{ ` ` `  `                ``// This is important. For  ` `                ``// current i and j, there  ` `                ``// are total k-j third elements. ` `                ``for` `(``int` `x = j + 1; x <= k; x++) ` `                    ``Console.WriteLine(arr[i] + ``", "` `+  ` `                                    ``arr[j] + ``", "` `+  ` `                                    ``arr[x]); ` `                ``j++; ` `            ``} ` `        ``} ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main() ` `{ ` `    ``int``[] arr = { 5, 1, 3, 4, 7 }; ` `    ``int` `n = arr.Length; ` `    ``int` `sum = 12; ` `    ``printTriplets(arr, n, sum); ` `} ` `} ` ` `  `// This code is contributed ` `// by Akanksha Rai `

## PHP

 `= ``\$sum``) ` `                ``\$k``--; ` ` `  `            ``// Else move left corner ` `            ``else`  `            ``{ ` ` `  `                ``// This is important. For current i and j, ` `                ``// there are total k-j third elements. ` `                ``for` `(``\$x` `= ``\$j` `+ 1; ``\$x` `<= ``\$k``; ``\$x``++) ` `                    ``echo` `\$arr``[``\$i``] . ``", "` `. ``\$arr``[``\$j``] . ` `                              ``", "` `. ``\$arr``[``\$x``] . ``"\n"``; ` `                ``\$j``++; ` `            ``} ` `        ``} ` `    ``} ` `} ` ` `  `// Driver Code ` `\$arr` `= ``array``(5, 1, 3, 4, 7); ` `\$n` `= sizeof(``\$arr``); ` `\$sum` `= 12; ` `printTriplets(``\$arr``, ``\$n``, ``\$sum``); ` ` `  `// This code is contributed  ` `// by Akanksha Rai ` `?> `

Output:

```1, 3, 4
1, 3, 5
1, 3, 7
1, 4, 5
```

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.