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)
This article is contributed by nuclode. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.