 Open in App
Not now

# Number of coins to be removed for the first player to win the Game

• Last Updated : 23 Dec, 2022

Two friends, A, and B are playing a game. In this game, a group of N coins is placed. The players can pick any number of coins between 1 and 4 (both inclusive) in their chance. The player who takes the last coin wins the game. If A starts first, find out how many coins should he pick such that he is guaranteed to win the game or determine if it’s impossible for him to win?

Note: Consider both A and B to play the game optimally.

Examples:

Input: N = 18
Output: 3
Explanation: Player A is guaranteed a win if he picks 3 coins first.

Input: N = 10
Output: -1
Explanation: Player A is guaranteed to lose no matter how many matches he picks at first.

Approach: This problem can be solved by observing the fact that the sum of two numbers can always be made 5.

Considering all cases possible:

• If one selects 1 coin then the second can take 4 to make the sum of 5.
• If one selects 2 coins then the second can take 3 to make the sum of 5.
• If one selects 3 coins then the second can take 2 to make the sum of 5.
• If one selects 4 coins then the second can take 1 to make the sum of 5.

So in all cases, the second player can make a sum of 5. Hence if Player “A” can make the total number of coins left a multiple of 5 after the first turn then in each even number of turns after that, player “A” can make that sum a multiple of (as whatever B picks the player A will be able to make the sum as 5 and hence can make any multiple of 5). And hence be available to win the game.

Follow the steps to solve the problem:

• In order to make the coins left a multiple of 5, player A has to select N % 5 coins.
• And if N%5 = 0 then he cannot make a sum of 5 as he can take from 1 to 4 coins only.
• So he will be guaranteed to lose the game.
• Hence if N % 5 = 0 then he will lose the game and if it is non 0 then player A will choose N % 5 and be guaranteed to win the game.

Below is the implementation of the above approach.

## C++

 `// C++ code to implement the approach`   `#include ` `using` `namespace` `std;`   `// Function to findthe number of coins` `void` `coinGame(``long` `long` `n)` `{` `    ``if` `(n % 5 == 0) {` `        ``cout << ``"Player A will lose"` `<< endl;` `    ``}` `    ``else` `{` `        ``cout << ``"Player A should pick "` `<< n % 5` `             ``<< ``" coins"` `<< endl;` `    ``}` `}`   `// Driver code` `int` `main()` `{` `    ``// First test case` `    ``int` `N = 18;` `    ``coinGame(N);`   `    ``// Second test case` `    ``N = 10;` `    ``coinGame(N);`   `    ``// Third test case` `    ``N = 3;` `    ``coinGame(N);`   `    ``return` `0;` `}`

## Java

 `// Java code to implement the approach`   `import` `java.io.*;`   `class` `GFG {`   `    ``static` `void` `coinGame(``int` `n)` `    ``{` `        ``if` `(n % ``5` `== ``0``) {` `            ``System.out.println(``"Player A will lose"``);` `        ``}` `        ``else` `{` `            ``System.out.println(``"Player A should pick "` `                               ``+ n % ``5` `+ ``" coins"``);` `        ``}` `    ``}`   `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``// First test case` `        ``int` `N = ``18``;` `        ``coinGame(N);`   `        ``// Second test case` `        ``N = ``10``;` `        ``coinGame(N);`   `        ``// Third test case` `        ``N = ``3``;` `        ``coinGame(N);` `    ``}` `}`   `// This code is contributed by lokesh.`

## Python3

 `# Python code to implement the approach` `def` `coin_game(n):` `    ``if` `n ``%` `5` `=``=` `0``:` `        ``print``(``"Player A will lose"``)` `    ``else``:` `        ``print``(``"Player A should pick "` `+` `str``(n ``%` `5``) ``+` `" coins"``)`   `# First test case` `N ``=` `18` `coin_game(N)`   `# Second test case` `N ``=` `10` `coin_game(N)`   `# Third test case` `N ``=` `3` `coin_game(N)`   `# This code is contributed by lokesh.`

## C#

 `// C# code to implement the approach` `using` `System;` `public` `class` `GFG {`   `  ``static` `void` `coinGame(``int` `n)` `  ``{` `    ``if` `(n % 5 == 0) {` `      ``Console.WriteLine(``"Player A will lose"``);` `    ``}` `    ``else` `{` `      ``Console.WriteLine(``"Player A should pick "` `                        ``+ n % 5 + ``" coins"``);` `    ``}` `  ``}`   `  ``static` `public` `void` `Main()` `  ``{` `    ``// First test case` `    ``int` `N = 18;` `    ``coinGame(N);`   `    ``// Second test case` `    ``N = 10;` `    ``coinGame(N);`   `    ``// Third test case` `    ``N = 3;` `    ``coinGame(N);` `  ``}` `}`   `// This code is contributed by sanjoy_62.`

## Javascript

 `// JAVASCRIPT code to implement the approach`   `// Function to find the number of coins` `function` `coinGame( n)` `{` `    ``if` `(n % 5 == 0) {` `        ``console.log(``"Player A will lose"``);` `    ``}` `    ``else` `{` `        ``console.log(``"Player A should pick "` `+ n % 5` `            ``+ ``" coins"``);` `    ``}` `}`   `// Driver code`   `    ``// First test case` `    ``let N = 18;` `    ``coinGame(N);`   `    ``// Second test case` `    ``N = 10;` `    ``coinGame(N);`   `    ``// Third test case` `    ``N = 3;` `    ``coinGame(N);`   `   ``// This code is contributed by garg28harsh.`

Output

```Player A should pick 3 coins
Player A will lose
Player A should pick 3 coins```

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

My Personal Notes arrow_drop_up
Related Articles