Problem Statement
Little Johnny has a stick that is 64 centimeters long, but he thinks it would be more fun to play with a stick that is x centimeters long. He decides to break the original stick into a number of smaller sticks, and then glue them together to get a stick that is exactly x centimeters long.
The easiest way to break a stick is to break it in half, so Johnny will use the following procedure:
- Sum the lengths of all the sticks (initially, there is just one 64 centimeter stick). While this sum is greater than x, repeat the following:
- Take one of the sticks with the shortest length and break it in half.
- If discarding one of the halves would not make the sum of the remaining sticks' lengths less than x, throw that half away.
- Finally, glue the remaining sticks together to form a stick that is x centimeters long.
Definition
- Class:
- Stick
- Method:
- pieces
- Parameters:
- int
- Returns:
- int
- Method signature:
- int pieces(int x)
- (be sure your method is public)
Notes
- The algorithm described in the problem statement guarantees that you will always end up with a total length of exactly x in the final step.
Constraints
- x will be between 1 and 64, inclusive.
Examples
32
Returns: 1
After the first break Johnny gets a stick 32cm long.48
Returns: 2
First, he breaks the stick into two 32cm long sticks. Then, he breaks one of the 32cm sticks in half and discards one of the halves. The remaining two sticks have a total length of 48cm when glued together.23
Returns: 4