Imprime trillizos con suma menor que k

Dada una array de enteros distintos y un valor de suma. Imprima todos los tripletes con una suma menor que el valor de suma dado. La Complejidad de Tiempo Esperada es O(n 2 ).

Ejemplos

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)
               

Una solución simple es ejecutar tres bucles para considerar todos los tripletes uno por uno. Para cada triplete, compare las sumas e imprima el triplete actual si su suma es menor que la suma dada. 

C++

// A Simple C++ program to count triplets with sum
// smaller than a given value
#include<bits/stdc++.h>
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[0];
    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

<?php
// A Simple PHP program to count triplets
// with sum smaller than a given value
 
function printTriplets(&$arr, $n, $sum)
{
    // Fix the first element as A[i]
    for ($i = 0; $i < $n - 2; $i++)
    {
    // Fix the second element as A[j]
    for ($j = $i + 1; $j < $n - 1; $j++)
    {
        // Now look for the third number
        for ($k = $j + 1; $k < $n; $k++)
            if ($arr[$i] + $arr[$j] +
                           $arr[$k] < $sum)
            {
                echo($arr[$i]);
                echo(", " );
                echo($arr[$j]);
                echo(", ");
                echo($arr[$k]);
                echo("\n");
            }
    }
    }
}
 
// Driver Code
$arr = array(5, 1, 3, 4, 7);
$n = sizeof($arr);
$sum = 12;
printTriplets($arr, $n, $sum);
 
// This code is contributed
// by Shivi_Aggarwal
?>

Javascript

<script>
 
// A Simple JavaScript program to
// count triplets with sum
// smaller than a given value
 
function printTriplets(arr, n, sum)
{
    // Fix the first element as A[i]
    for (let i = 0; i < n-2; i++)
    {
    // Fix the second element as A[j]
    for (let j = i+1; j < n-1; j++)
    {
        // Now look for the third number
        for (let k = j+1; k < n; k++)
            if (arr[i] + arr[j] + arr[k] < sum)
                document.write(arr[i] + ", " + arr[j]
                    + ", " + arr[k] + "<br>");
    }
    }
}
 
// Driver program
    let arr = [5, 1, 3, 4, 7];
    let n = arr.length;
    let sum = 12;
    printTriplets(arr, n, sum);
 
 
// This code is contributed by Surbhi Tyagi.
 
</script>
Producción: 

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

 

La complejidad temporal de la solución anterior es O(n 3 ).

Una solución eficiente puede imprimir trillizos en O (n 2 ) ordenando primero la array y luego usando el método 1 de esta publicación en un bucle.

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

A continuación se muestra la implementación de la idea anterior. 

C++

// C++ program to print triplets with sum smaller
// than a given value
#include <bits/stdc++.h>
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[0];
    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

Python3

# Python3 program to print
# triplets with sum smaller
# than a given value
def printTriplets(arr, n, sum):
     
    # Sort input array
    arr.sort()
  
    # Every iteration of loop
    # counts triplet with
    # first element as arr[i].
    for i in range(n - 2):
 
        # Initialize other two elements
        # as corner elements of subarray
        # arr[j+1..k]
        (j, k) = (i + 1, 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 -= 1
  
            # Else move left corner
            else:
  
                # This is important. For
                # current i and j, there
                # are total k-j third elements.
                for x in range(j + 1, k + 1):
                    print(str(arr[i]) + ", " +
                          str(arr[j]) + ", " +
                          str(arr[x]))
        
                j += 1
 
# 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 rutvik_56

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

<?php
// PHP program to print triplets with
// sum smaller than a given value
 
function printTriplets($arr, $n, $sum)
{
    // Sort input array
    sort($arr, 0);
 
    // Every iteration of loop counts
    // triplet with first element as arr[i].
    for ($i = 0; $i < $n - 2; $i++)
    {
 
        // Initialize other two elements as corner
        // elements of subarray arr[j+1..k]
        $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 ($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
?>

Javascript

<script>
 
    // JavaScript program to print
    // triplets with sum smaller
    // than a given value
     
    function printTriplets(arr, n, sum)
    {
        // Sort input array
        arr.sort(function(a, b){return a - b});
 
        // Every iteration of loop
        // counts triplet with
        // first element as arr[i].
        for (let i = 0; i < n - 2; i++)
        {
 
            // Initialize other two elements
            // as corner elements of subarray
            // arr[j+1..k]
            let 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 (let x = j + 1; x <= k; x++)
                        document.write(arr[i] + ", " +
                                        arr[j] + ", " +
                                        arr[x] + "</br>");
                    j++;
                }
            }
        }
    }
     
    let arr = [ 5, 1, 3, 4, 7 ];
    let n = arr.length;
    let sum = 12;
    printTriplets(arr, n, sum);
     
</script>
Producción: 

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

 

Publicación traducida automáticamente

Artículo escrito por kartik y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *