Related Articles
Find the winner of a game of donating i candies in every i-th move
• Last Updated : 08 Apr, 2021

Given two integers X and Y representing the number of candies allocated to players A and B respectively, where both the players indulge in a game of donating i candies to the opponent in every ith move. Starting with player A, the game continues with alternate turns until a player is unable to donate the required amount of candies and loses the game, the task is to find the winner of the game.

Examples:

Input: X = 2, Y = 3
Output: A
Explanation: The game turns out in the following manner:

Since A fails to donate 5 candies in the 5th step, B wins the game.

Input: X = 2, Y = 1
Output: B
Explanation: The game turns out in the following manner:

Since B fails to give 4 candies in the 4th step, A wins the game.

Approach: The idea is to solve the problem based on the following observation:

• The player whose candies reduce to 0 first, will not be having enough candies to give in the next move.
• Count of candies of player A decreases by 1 in odd moves.
• Count of candies of player B decreases by 1 in even moves.

Follow the steps below to solve the problem:

1. Initialize two variables, say chanceA and chanceB, representing the number of moves in which the number of candies possessed by a player reduces to 0.
2. Since count of candies of player A decreases by 1 in odd moves, chanceA = 2 * (X – 1) + 1
3. Since count of candies of player B decreases by 1 in even moves, chanceB = 2 * Y
4. If chanceA < chanceB, then B will be the winning player.
5. Otherwise, A will be the winning player.
6. Print the winning player.

Below is the implementation of the above approach:

## C++

 `// C++ Program for the``// above approach`` ` `#include ``using` `namespace` `std;`` ` `// Function to find the winning``// player in a game of donating i``// candies to opponent in i-th move``int` `stepscount(``int` `a, ``int` `b)``{``    ``// Steps in which number of``    ``// candies of player A finishes``    ``int` `chanceA = 2 * a - 1;`` ` `    ``// Steps in which number of``    ``// candies of player B finishes``    ``int` `chanceB = 2 * b;`` ` `    ``// If A's candies finishes first``    ``if` `(chanceA < chanceB) {``        ``cout << ``"B"``;``    ``}`` ` `    ``// Otherwise``    ``else` `if` `(chanceB < chanceA) {``        ``cout << ``"B"``;``    ``}`` ` `    ``return` `0;``}`` ` `// Driver Code``int` `main()``{``    ``// Input`` ` `    ``// Candies possessed``    ``// by player A``    ``int` `A = 2;`` ` `    ``// Candies possessed``    ``// by player B``    ``int` `B = 3;`` ` `    ``stepscount(A, B);`` ` `    ``return` `0;``}`
Output:
```B
```

Time Complexity: O(1)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up