**Problem**

Given a circular (or regular polygon) cake and a knife by which you can only cut vertically, find the maximum number of pieces of cake you can get by making n cuts. Write a program to do that.

Solution

The solution to this is very simple, if you know mathematics. :PNumber of pieces p

p = ( n^2+n+2)/2 p = C(n+1,2) + 1

More on wikipedia - http://en.wikipedia.org/wiki/Lazy_caterer%27s_sequence.

Proof

When a circle is cut

*n*times to produce the maximum number of pieces, represented as

*p*=

*Æ’*(

*n*), the

*n*th cut must be considered; the number of pieces before the last cut is

*Æ’*(

*n*− 1), while the number of pieces added by the last cut is

*n*.

To obtain the maximum number of pieces, the

*n*th cut line should cross all the other previous cut lines inside the circle, but not cross any intersection of previous cut lines. Thus, the

*n*th line itself is cut in

*n*− 1 places, and into

*n*line segments. Each segment divides one piece of the (

*n*− 1)-cut pancake into 2 parts, adding exactly

*n*to the number of pieces. The new line can't have any more segments since it can only cross each previous line once. A cut line can always cross over all previous cut lines, as rotating the knife at a small angle around a point that is not an existing intersection will, if the angle is small enough, intersect all the previous lines including the last one added.

Thus, the total number of pieces after

*n*cuts is

f(n) = n + f(n-1)

*Æ’*(

*n*− 1) is expanded one term the relation becomes

f(n) = n + n-1 + f(n-2)

*Æ’*(

*n*− 2) can continue until the last term is reduced to

*Æ’*(0), thus,

f(n) = n + n-1 + n-2 ..... + 1 + f(0)

- f(n) = 1 + (1+2+3 + .... n)

- f(n) = 1+ n*(n+1)/2 = ( n^2+n+2)/2

## 0 comments:

## Post a Comment