Número triangular más pequeño mayor que p

Dado un número n de cubos y cada cubo está numerado del 1 an y las flores en él son iguales a números triangulares . Tienes que elegir el balde que queda con el mínimo de flores después de recoger las flores ‘p’ de él. 
 

El primer balde contiene solo 1 flor, el segundo balde contiene 3, el tercero contiene 6 y así sucesivamente siguiendo un patrón de n(n+1)/2.
Ejemplos: 
 

Input : p = 4
Output : bucket 3 
Explanation :
Buckets with flowers : 1 3 6 10 ....
So, bucket 3 is left with only two flowers after 
selecting p flowers from it which is minimum.

Input : p = 10
Output : bucket 4
Explanation :
Bucket with flowers : 1 3 6 10 15 ...
So, selecting 10 flowers from 4th bucket leave
it with 0 flowers.

Enfoque: 
al observar la entrada/salida de diferentes casos, el número de cubo se puede calcular usando la fórmula: 
 

n = ceil( (sqrt(8*p+1)-1)/2 ) ;

¿Como funciona?
Necesitamos el n más pequeño tal que n*(n+1)/2 >= p
Entonces necesitamos encontrar las raíces de la ecuación n 2 + n – 2*p >= 0.
Aplicando la fórmula discutida aquí , obtenemos n = ceil ( (raíz cuadrada(8*p+1)-1)/2 ) 
 

C++

// CPP code to find the bucket to choose
// for picking flowers out of it
#include<bits/stdc++.h>
using namespace std;
 
int findBucketNo(int p)
{
   return ceil( ( sqrt( 8*p + 1 ) -1 ) / 2 ) ;
}
 
// Driver code
int main()
{
  int p = 10 ;   
  cout << findBucketNo(p);
  return 0;
}

Java

//Java code to find the bucket to choose
// for picking flowers out of it
import java.lang.System.*;
 
class GFG {
     
    static int findBucketNo(int p)
    {
        return (int)Math.ceil((
        Math.sqrt( 8*p + 1 ) -1 ) / 2 ) ;
    }
     
    // Driver code
    public static void main(String[] args)
    {
        int p = 10 ;
         
        System.out.println(findBucketNo(p));
    }
}
 
// This code is contributed by
// Smitha Dinesh Semwal

Python 3

# Python 3 code to find the bucket
# to choose for picking flowers
# out of it
import math
 
def findBucketNo(p):
 
    return math.ceil( ( math.sqrt(
               8*p + 1 ) -1 ) / 2 )
 
# Driver code
p = 10
 
print(findBucketNo(p))
 
# This code is contributed by
# Smitha Dinesh Semwal

C#

// C# code to find the bucket to choose
// for picking flowers out of it
using System;
 
class GFG {
     
    static int findBucketNo(int p)
    {
        return (int)Math.Ceiling((
        Math.Sqrt( 8*p + 1 ) -1 ) / 2 );
    }
     
    // Driver code
    static public void Main ()
    {
        int p = 10 ;
        Console.WriteLine(findBucketNo(p));
    }
}
 
// This code is contributed by Ajit.

PHP

<?php
// PHP code to find the bucket
// to choose for picking
// flowers out of it
 
function findBucketNo($p)
{
    return ceil( ( sqrt( 8 * $p +
                  1 ) -1 ) / 2 ) ;
}
 
// Driver code
$p = 10 ;
echo(findBucketNo($p));
 
// This code is contributed by Ajit.
?>

Javascript

<script>
// javascript code to find the bucket to choose
// for picking flowers out of it
function findBucketNo( p)
{
   return Math.ceil( ( Math.sqrt( 8 * p + 1 ) -1 ) / 2 ) ;
}
 
// Driver code
let p = 10 ;   
   document.write(findBucketNo(p));
    
    // This code is contributed by gauravrajput1
 
</script>
Producción : 

4

 

Complejidad de tiempo : O(1)
 

Publicación traducida automáticamente

Artículo escrito por Arpit_Dixit 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 *