The Lazy Caterer’s Problem
Given an integer n, denoting the number of cuts that can be made on a pancake, find the maximum number of pieces that can be formed by making n cuts.
Examples :
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).
We can optimize above formula.
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
Hence with this optimization, we can answer all the queries in O(1).
Below is the implementation of above idea :
C++
#include <iostream>
using namespace std;
int findPieces( int n)
{
return (n * ( n + 1)) / 2 + 1;
}
int main()
{
cout << findPieces(1) << endl;
cout << findPieces(2) << endl;
cout << findPieces(3) << endl;
cout << findPieces(50) << endl;
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int findPieces( int n)
{
return (n * (n + 1 )) / 2 + 1 ;
}
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 ));
}
}
|
Python3
def findPieces( n ):
return (n * ( n + 1 )) / / 2 + 1
print (findPieces( 1 ))
print (findPieces( 2 ))
print (findPieces( 3 ))
print (findPieces( 50 ))
|
C#
using System;
class GFG
{
static int findPieces( int n)
{
return (n * (n + 1)) / 2 + 1;
}
public static void Main ()
{
Console.WriteLine(findPieces(1));
Console.WriteLine(findPieces(2));
Console.WriteLine(findPieces(3));
Console.Write(findPieces(50));
}
}
|
PHP
<?php
function findPieces( $n )
{
return ( $n * ( $n + 1)) / 2 + 1;
}
echo findPieces(1) , "\n" ;
echo findPieces(2) , "\n" ;
echo findPieces(3) , "\n" ;
echo findPieces(50) , "\n" ;
?>
|
Javascript
<script>
function findPieces(n)
{
return (n * (n + 1)) / 2 + 1;
}
document.write(findPieces(1) + "<br/>" );
document.write(findPieces(2) + "<br/>" );
document.write(findPieces(3) + "<br/>" );
document.write(findPieces(50));
</script>
|
Output :
2
4
7
1276
References : oeis.org
Last Updated :
30 Mar, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...