# Cake Distribution Problem

• Difficulty Level : Easy
• Last Updated : 08 Mar, 2022

Given two integers N and M, where N is the number of friends sitting in a clockwise manner in a circle and M is the number of cakes. The task is to calculate the left number of cakes after distributing i cakes to i’th friend. The distribution of cakes will stop if the count of cakes is less than the required amount.
Examples:

Input: N = 4, M = 11
Output:
1st round:
The 1st friend gets 1 cake, 2nd gets 2 cakes,
3rd get 3 and 4th gets 4 cakes.
Remaining cakes = 11 – (1 + 2 + 3 + 4) = 1
2nd round:
This time only 1st friend gets the left 1 cake.
Remaining cakes = 1 – 1 = 0
Input: N = 3, M = 8
Output:
1st round:
The 1st friend gets 1 cake, 2nd gets 2 cakes,
and 3rd get 3 cakes.
Remaining cakes = 8 – (1 + 2 + 3) = 2
2nd round:
This time only 1st friend gets the left 1 cake,
and then there is no cake left for 2nd friend.
Remaining cakes = 2 – 1 = 1

Approach:

• Check how many cycles of distribution of cakes are possible from m number of cakes.
• Calculate the number of cakes for 1 cycle which is

`sum = n * (n + 1) / 2`
• Now diving M by sum we get cycle count + some remainder.
• Now check how many remaining cakes are again possible to distribute to x friends.
• The value of x can be easily achieved by solving quadratic equation

`remainder = x * (x + 1) / 2`

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include``using` `namespace` `std;` `// Function to return the``// remaining count of cakes``int` `cntCakes(``int` `n, ``int` `m)``{` `    ``// Sum for 1 cycle``    ``int` `sum = (n * (n + 1)) / 2;` `    ``// no. of full cycle and remainder``    ``int` `quo = m/sum ;``    ``int` `rem = m % sum ;``    ``double` `ans = m - quo * sum ;` `    ``double` `x = (-1 + ``pow``((8 * rem) + 1, 0.5)) / 2;``    ` `    ``ans = ans - x * (x + 1) / 2;` `    ``return` `int``(ans);``}` `// Driver Code``int` `main ()``{``    ``int` `n = 3;``    ``int` `m = 8;``    ``int` `ans = cntCakes(n, m);``    ``cout << (ans);``}` `// This code is contributed by Surendra_Gangwar`

## Java

 `// Java implementation of the approach``class` `GFG``{``    ` `    ``// Function to return the``    ``// remaining count of cakes``    ``static` `int` `cntCakes(``int` `n, ``int` `m)``    ``{``    ` `        ``// Sum for 1 cycle``        ``int` `sum = (n * (n + ``1``)) / ``2``;``    ` `        ``// no. of full cycle and remainder``        ``int` `quo = m/sum ;``        ``int` `rem = m % sum ;``        ``double` `ans = m - quo * sum ;``    ` `        ``double` `x = (-``1` `+ Math.pow((``8` `* rem) + ``1``, ``0.5``)) / ``2``;``        ` `        ``ans = ans - x * (x + ``1``) / ``2``;``    ` `        ``return` `(``int``)ans;``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main (String[] args)``    ``{``        ``int` `n = ``3``;``        ``int` `m = ``8``;``        ``int` `ans = cntCakes(n, m);``        ``System.out.println(ans);``    ``}``}` `// This code is contributed by AnkitRai01`

## Python3

 `# Python3 implementation of the approach` `# Function to return the``# remaining count of cakes``def` `cntCakes(n, m):` `    ``# Sum for 1 cycle``    ``sum` `=` `(n``*``(n ``+` `1``))``/``/``2` `    ``# no. of full cycle and remainder``    ``quo, rem ``=` `m``/``/``sum``, m ``%` `sum``    ``ans ``=` `m ``-` `quo ``*` `sum` `    ``x ``=` `int``((``-``1` `+` `(``8` `*` `rem ``+` `1``)``*``*``0.5``)``/``2``)``    ``ans ``=` `ans ``-` `x``*``(x ``+` `1``)``/``/``2` `    ``return` `ans` `# Driver code``def` `main():``  ``n ``=` `4``  ``m ``=` `11``  ``ans ``=` `cntCakes(n, m)``  ``print``(ans)` `main()`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG``{``    ``// Function to return the``    ``// remaining count of cakes``    ``static` `int` `cntCakes(``int` `n, ``int` `m)``    ``{``    ` `        ``// Sum for 1 cycle``        ``int` `sum = (n * (n + 1)) / 2;``    ` `        ``// no. of full cycle and remainder``        ``int` `quo = m/sum ;``        ``int` `rem = m % sum ;``        ``double` `ans = m - quo * sum ;``    ` `        ``double` `x = (-1 + Math.Pow((8 * rem) + 1, 0.5)) / 2;``        ` `        ``ans = ans - x * (x + 1) / 2;``    ` `        ``return` `(``int``)ans;``    ``}` `    ``// Driver Code``    ``static` `public` `void` `Main ()``    ``{``        ``int` `n = 3;``        ``int` `m = 8;``        ``int` `ans = cntCakes(n, m);``        ``Console.Write(ans);``    ``}``}` `// This code is contributed by ajit.`

## Javascript

 ``

Output:

`0`

Time Complexity: O(1)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up