Given three positive integers X, Y and P. Here P denotes the number of turns. Whenever the turn is odd X is multiplied by 2 and in every even turn Y is multiplied by 2. The task is to find the value of max[X, Y] ÷ min[X, Y] after the complete P turns.
Examples :
Input : X = 1, Y = 2, P = 1
Output : 1
Explanation: As turn is odd, X is multiplied by
2 and becomes 2. Now, X is 2 and Y is also 2.
Therefore, 2 ÷ 2 is 1.Input : X = 3, Y = 7, p = 2
Output : 2
Explanation: Here we have 2 turns. In the 1st turn which is odd
X is multiplied by 2. And the values are 6 and 7.
In the next turn which is even Y is multiplied by 2.
Now the final values are 6 and 14. Therefore, 14 ÷ 6 is 2.
Lets play the above game for 8 turns :
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |------|---|----|----|----|----|----|----|-----|-----| | X[i] | X | 2X | 2X | 4X | 4X | 8X | 8X | 16X | 16X | | Y[i] | Y | Y | 2Y | 2Y | 4Y | 4Y | 8Y | 8Y | 16Y |
Here we can easily
spot a pattern :
if i is even, then X[i] = z * X and Y[i] = z * Y. if i is odd, then X[i] = 2*z * X and Y[i] = z * Y.
Here z is actually the power of 2. So, we can simply say –
If P is even output will be max[X, Y] ÷ min[X, Y] else output will be max[2*X, Y] ÷ min[2*X, Y].
Below is the implementation :
C++
#include
using
namespace
std;
int
findValue[
int
X,
int
Y,
int
P]
{
if
[P % 2 == 0]
return
[max[X, Y] / min[X, Y]];
else
return
[max[2 * X, Y] / min[2 * X, Y]];
}
int
main[]
{
int
X = 1, Y = 2, P = 1;
cout
Javascript
function
findValue[X, Y, P]
{
if
[P % 2 == 0]
return
parseInt[[Math.max[X, Y] / Math.min[X, Y]], 10];
else
return
parseInt[[Math.max[2 * X, Y] / Math.min[2 * X, Y]], 10];
}
let X = 1, Y = 2, P = 1;
document.write[findValue[X, Y, P] +
""
];
X = 3, Y = 7, P = 2;
document.write[findValue[X, Y, P]];
Time Complexity: O[1]
Auxiliary Space: O[1]