In this post, we will solve Chocolate Feast HackerRank Solution. This problem (Chocolate Feast) is a part of HackerRank Problem Solving series.
Task
Little Bobby loves chocolate. He frequently goes to his favorite 5 & 10 store, Penny Auntie, to buy them. They are having a promotion at Penny Auntie. If Bobby saves enough wrappers, he can turn them in for a free chocolate.
Example
n = 15
c = 3
m = 2
He has 15 to spend, bars cost 3, and he can turn in 2 wrappers to receive another bar. Initially, he buys 5 bars and has 5 wrappers after eating them. He turns in 4 of them, leaving him with 1, for 2 more bars. After eating those two, he has 3 wrappers, turns in 2 leaving him with 1 wrapper and his new bar. Once he eats that one, he has 2 wrappers and turns them in for another bar. After eating that one, he only has wrapper, and his feast ends. Overall, he has eaten 5 + 2 + 1 + 1 = 9 bars.
Function Description
Complete the chocolateFeast function in the editor below.
chocolateFeast has the following parameter(s):
- int n: Bobby’s initial amount of money
- int c: the cost of a chocolate bar
- int m: the number of wrappers he can turn in for a free bar
Returns
- int: the number of chocolates Bobby can eat after taking full advantage of the promotion
Note: Little Bobby will always turn in his wrappers if he has enough to get a free chocolate.
Input Format
The first line contains an integer, t, the number of test cases to analyze.
Each of the next t lines contains three space-separated integers: n, c, and m. They represent money to spend, cost of a chocolate, and the number of wrappers he can turn in for a free chocolate.
Constraints
- 1 <= t <= 1000
- 2 <= n <= 105
- 1 <= c <= n
- 2 <= m <= n
Sample Input
STDIN Function
----- --------
3 t = 3 (test cases)
10 2 5 n = 10, c = 2, m = 5 (first test case)
12 4 4 n = 12, c = 4, m = 4 (second test case)
6 2 2 n = 6, c = 2, m = 2 (third test case)
Sample Output
6
3
5
Explanation
Bobby makes the following 3 trips to the store:
- He spends 10 on 5 chocolates at 2 apiece. He then eats them and exchanges all 5 wrappers to get 1 more. He eats 6 chocolates.
- He spends his 12 on 3 chocolates at 4 apiece. He has 3 wrappers, but needs 4 to trade for his next chocolate. He eats 3 chocolates.
- He spends 6 on 3 chocolates at 2 apiece. He then exchanges 2 of the 3 wrappers for 1 additional piece. Next, he uses his third leftover chocolate wrapper from his initial purchase with the wrapper from his trade-in to do a second trade-in for 1 more piece. At this point he has 1 wrapper left, which is not enough to perform another trade-in. He eats 5 chocolates.
Solution – Chocolate Feast – HackerRank Solution
C++
#include <iostream> using namespace std; int main() { int t, n, c, m; cin >> t; while (t--) { cin >> n >> c >> m; int answer = n / c; int wrappers = answer; // Spend wrappers for additional chocolates. while (wrappers >= m) { wrappers -= m; // Eat chocolate, produce new wrapper. answer++; wrappers++; } cout << answer << endl; } return 0; }
Python
import sys def wrappers(wr, m): res = 0 if wr//m > 0: res += wr//m + wrappers(wr//m + wr%m, m) return res def chocolateFeast(n, c, m): return n//c + wrappers(n//c, m) if __name__ == "__main__": t = int(input().strip()) for a0 in range(t): n, c, m = input().strip().split(' ') n, c, m = [int(n), int(c), int(m)] result = chocolateFeast(n, c, m) print(result)
Java
import java.io.*; import java.util.*; public class Solution { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); scanner.nextLine(); while (scanner.hasNext()) { int money = scanner.nextInt(); int price = scanner.nextInt(); int bonus = scanner.nextInt(); int count = money / price; int wrappers = count; while (wrappers >= bonus) { int freebies = wrappers / bonus; count += freebies; wrappers = freebies + wrappers % bonus; } System.out.println(count); } } }
Note: This problem (Chocolate Feast) is generated by HackerRank but the solution is provided by CodingBroz. This tutorial is only for Educational and Learning purpose.