Dado un número entero n, que denota el número de cortes que se pueden hacer en un panqueque, encuentre el número máximo de piezas que se pueden formar al hacer n cortes.
Ejemplos:
Input : n = 1 Output : 2 With 1 cut we can divide the pancake in 2 pieces Input : 2 Output : 4 With 2 cuts we can divide the pancake in 4 pieces Input : 3 Output : 7 We can divide the pancake in 7 parts with 3 cuts Input : 50 Output : 1276
Let f(n) denote the maximum number of pieces that can be obtained by making n cuts. Trivially, f(0) = 1 As there'd be only 1 piece without any cut. Similarly, f(1) = 2 Proceeding in similar fashion we can deduce the recursive nature of the function. The function can be represented recursively as : f(n) = n + f(n-1) Hence a simple solution based on the above formula can run in O(n).
Podemos optimizar la fórmula anterior.
We now know , f(n) = n + f(n-1) Expanding f(n-1) and so on we have , f(n) = n + n-1 + n-2 + ...... + 1 + f(0) which gives, f(n) = (n*(n+1))/2 + 1
Por lo tanto, con esta optimización, podemos responder todas las consultas en O(1).
A continuación se muestra la implementación de la idea anterior:
C++
// A C++ program to find the solution to // The Lazy Caterer's Problem #include <iostream> using namespace std; // This function receives an integer n // and returns the maximum number of // pieces that can be made form pancake // using n cuts int findPieces(int n) { // Use the formula return (n * ( n + 1)) / 2 + 1; } // Driver Code int main() { cout << findPieces(1) << endl; cout << findPieces(2) << endl; cout << findPieces(3) << endl; cout << findPieces(50) << endl; return 0; }
Java
// Java program to find the solution to // The Lazy Caterer's Problem import java.io.*; class GFG { // This function returns the maximum // number of pieces that can be made // form pancake using n cuts static int findPieces(int n) { // Use the formula return (n * (n + 1)) / 2 + 1; } // Driver program to test above function public static void main (String[] args) { System.out.println(findPieces(1)); System.out.println(findPieces(2)); System.out.println(findPieces(3)); System.out.println(findPieces(50)); } } // This code is contributed by Pramod Kumar
Python3
# A Python 3 program to # find the solution to # The Lazy Caterer's Problem # This function receives an # integer n and returns the # maximum number of pieces # that can be made form # pancake using n cuts def findPieces( n ): # Use the formula return (n * ( n + 1)) // 2 + 1 # Driver Code print(findPieces(1)) print(findPieces(2)) print(findPieces(3)) print(findPieces(50)) # This code is contributed # by ihritik
C#
// C# program to find the solution // to The Lazy Caterer's Problem using System; class GFG { // This function returns the maximum // number of pieces that can be made // form pancake using n cuts static int findPieces(int n) { // Use the formula return (n * (n + 1)) / 2 + 1; } // Driver code public static void Main () { Console.WriteLine(findPieces(1)); Console.WriteLine(findPieces(2)); Console.WriteLine(findPieces(3)); Console.Write(findPieces(50)); } } // This code is contributed by Nitin Mittal.
PHP
<?php // A php program to find // the solution to The // Lazy Caterer's Problem // This function receives // an integer n and returns // the maximum number of // pieces that can be made // form pancake using n cuts function findPieces($n) { // Use the formula return ($n * ( $n + 1)) / 2 + 1; } // Driver Code echo findPieces(1) , "\n" ; echo findPieces(2) , "\n" ; echo findPieces(3) , "\n" ; echo findPieces(50) ,"\n"; // This code is contributed // by nitin mittal. ?>
Javascript
<script> // Javascript program to find the solution to // The Lazy Caterer's Problem // This function returns the maximum // number of pieces that can be made // form pancake using n cuts function findPieces(n) { // Use the formula return (n * (n + 1)) / 2 + 1; } // Driver Code document.write(findPieces(1) + "<br/>"); document.write(findPieces(2) + "<br/>"); document.write(findPieces(3) + "<br/>"); document.write(findPieces(50)); </script>
Producción :
2 4 7 1276
Referencias: oeis.org
Este artículo es una contribución de Ashutosh Kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA