# Find the winner of a game of donating i candies in every i-th move

• Last Updated : 25 May, 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 << ``"A"``;``    ``}` `    ``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;``}`

## Java

 `// Java Program for above approach``class` `GFG{``    ` `// Function to find the winning``// player in a game of donating i``// candies to opponent in i-th move``static` `void` `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)``    ``{``        ``System.out.print(``"B"``);``    ``}` `    ``// Otherwise``    ``else` `if` `(chanceB < chanceA)``    ``{``        ``System.out.print(``"A"``);``    ``}``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ` `    ``// Input``    ``// Candies possessed by player A``    ``int` `A = ``2``;` `    ``// Candies possessed by player B``    ``int` `B = ``3``;` `    ``stepscount(A, B);``}``}` `// This code is contributed by abhinavjain194`

## Python3

 `# Python3 program for the above approach` `# Function to find the winning``# player in a game of donating i``# candies to opponent in i-th move``def` `stepscount(a, b):``    ` `    ``# Steps in which number of``    ``# candies of player A finishes``    ``chance_A ``=` `2` `*` `a ``-` `1``    ` `    ``# Steps in which number of``    ``# candies of player B finishes``    ``chance_B ``=` `2` `*` `b``    ` `    ``# If A's candies finishes first``    ``if` `(chance_A < chance_B):``        ``return` `'B'``        ` `    ``# Otherwise   ``    ``else``:``        ``return` `"A"` `# Driver code` `# Candies possessed by player A       ``A ``=` `2` `# Candies possessed by player B``B ``=` `3` `print``(stepscount(A, B))` `# This code is contributed by abhinavjain194`

## C#

 `// C# program for the above approach``using` `System;` `class` `GFG{``    ` `// Function to find the winning``// player in a game of donating i``// candies to opponent in i-th move``static` `void` `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)``    ``{``        ``Console.Write(``"B"``);``    ``}` `    ``// Otherwise``    ``else` `if` `(chanceB < chanceA)``    ``{``        ``Console.Write(``"A"``);``    ``}``}` `// Driver code``static` `void` `Main()``{``    ` `    ``// Input``    ``// Candies possessed by player A``    ``int` `A = 2;` `    ``// Candies possessed by player B``    ``int` `B = 3;` `    ``stepscount(A, B);``}``}` `// This code is contributed by abhinavjain194`

## Javascript

 ``
Output:
`B`

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

My Personal Notes arrow_drop_up