Coin game winner where every player has three choices
Last Updated :
18 Sep, 2023
A and B are playing a game. In the beginning, there are n coins. Given two more numbers x and y. In each move, a player can pick x or y or 1 coin. A always starts the game. The player who picks the last coin wins the game or the person who is not able to pick any coin loses the game. For a given value of n, find whether A will win the game or not if both are playing optimally.
Examples:
Input : n = 5, x = 3, y = 4
Output : A
There are 5 coins, every player can pick 1 or
3 or 4 coins on his/her turn.
A can win by picking 3 coins in first chance.
Now 2 coins will be left so B will pick one
coin and now A can win by picking the last coin.
Input : 2 3 4
Output : B
Let us take few example values of n for x = 3, y = 4.
n = 0 A can not pick any coin so he losses
n = 1 A can pick 1 coin and win the game
n = 2 A can pick only 1 coin. Now B will pick 1 coin and win the game
n = 3 4 A will win the game by picking 3 or 4 coins
n = 5, 6 A will choose 3 or 4 coins. Now B will have to choose from 2 coins so A will win.
We can observe that A wins game for n coins only when B loses for coins n-1 or n-x or n-y.
C++
#include <bits/stdc++.h>
using namespace std;
bool findWinner( int x, int y, int n)
{
int dp[n + 1];
dp[0] = false ;
dp[1] = true ;
for ( int i = 2; i <= n; i++) {
if (i - 1 >= 0 and !dp[i - 1])
dp[i] = true ;
else if (i - x >= 0 and !dp[i - x])
dp[i] = true ;
else if (i - y >= 0 and !dp[i - y])
dp[i] = true ;
else
dp[i] = false ;
}
return dp[n];
}
int main()
{
int x = 3, y = 4, n = 5;
if (findWinner(x, y, n))
cout << 'A' ;
else
cout << 'B' ;
return 0;
}
|
Java
import java.util.Arrays;
public class GFG {
static boolean findWinner( int x, int y, int n)
{
boolean [] dp = new boolean [n + 1 ];
Arrays.fill(dp, false );
dp[ 0 ] = false ;
dp[ 1 ] = true ;
for ( int i = 2 ; i <= n; i++) {
if (i - 1 >= 0 && dp[i - 1 ] == false )
dp[i] = true ;
else if (i - x >= 0 && dp[i - x] == false )
dp[i] = true ;
else if (i - y >= 0 && dp[i - y] == false )
dp[i] = true ;
else
dp[i] = false ;
}
return dp[n];
}
public static void main(String args[])
{
int x = 3 , y = 4 , n = 5 ;
if (findWinner(x, y, n) == true )
System.out.println( 'A' );
else
System.out.println( 'B' );
}
}
|
Python3
def findWinner(x, y, n):
dp = [ 0 for i in range (n + 1 )]
dp[ 0 ] = False
dp[ 1 ] = True
for i in range ( 2 , n + 1 ):
if (i - 1 > = 0 and not dp[i - 1 ]):
dp[i] = True
elif (i - x > = 0 and not dp[i - x]):
dp[i] = True
elif (i - y > = 0 and not dp[i - y]):
dp[i] = True
else :
dp[i] = False
return dp[n]
x = 3 ; y = 4 ; n = 5
if (findWinner(x, y, n)):
print ( 'A' )
else :
print ( 'B' )
|
C#
using System;
public class GFG {
static bool findWinner( int x, int y, int n)
{
bool [] dp = new bool [n + 1];
for ( int i = 0; i < n+1; i++)
dp[i] = false ;
dp[0] = false ;
dp[1] = true ;
for ( int i = 2; i <= n; i++)
{
if (i - 1 >= 0 && dp[i - 1] == false )
dp[i] = true ;
else if (i - x >= 0 && dp[i - x] == false )
dp[i] = true ;
else if (i - y >= 0 && dp[i - y] == false )
dp[i] = true ;
else
dp[i] = false ;
}
return dp[n];
}
public static void Main()
{
int x = 3, y = 4, n = 5;
if (findWinner(x, y, n) == true )
Console.WriteLine( 'A' );
else
Console.WriteLine( 'B' );
}
}
|
PHP
<?php
function findWinner( $x , $y , $n )
{
$dp = array ();
$dp [0] = false;
$dp [1] = true;
for ( $i = 2; $i <= $n ; $i ++)
{
if ( $i - 1 >= 0 and ! $dp [ $i - 1])
$dp [ $i ] = true;
else if ( $i - $x >= 0 and ! $dp [ $i - $x ])
$dp [ $i ] = true;
else if ( $i - $y >= 0 and ! $dp [ $i - $y ])
$dp [ $i ] = true;
else
$dp [ $i ] = false;
}
return $dp [ $n ];
}
$x = 3; $y = 4; $n = 5;
if (findWinner( $x , $y , $n ))
echo 'A' ;
else
echo 'B' ;
?>
|
Javascript
<script>
function findWinner(x, y, n)
{
var dp = Array(n + 1).fill(0);
dp[0] = false ;
dp[1] = true ;
for ( var i = 2; i <= n; i++)
{
if (i - 1 >= 0 && !dp[i - 1])
dp[i] = true ;
else if (i - x >= 0 && !dp[i - x])
dp[i] = true ;
else if (i - y >= 0 && !dp[i - y])
dp[i] = true ;
else
dp[i] = false ;
}
return dp[n];
}
var x = 3, y = 4, n = 5;
if (findWinner(x, y, n))
document.write( 'A' );
else
document.write( 'B' );
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(n)
Share your thoughts in the comments
Please Login to comment...