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>
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