Given an integer N which is the number of stones in a pile and the game of stones is being played between you and your friend, the task is to find out whether you’ll win or not. A player (on his/her turn) can remove 1 2 or 3 stones, the game continues in alternating turns. The one who is not able to make the move loses the game. In other words, the player who removes the last set of stones always wins. Print YES if you can win the game else print NO.
Examples:
Input: N = 4
Output: NO
Explanation: If there are 4 stones in the bag, then you will never win the game. No matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend. Hence, you are not able to make the move.
Input: N = 3
Output: YES
Explanation: Yes you can win the game, you just remove all 3 stones in your turn.
Approach:
- First consider base cases, i.e. for n = [1, 2, 3]. In these cases, you always win as you can pick all stones and your friend cannot make a move.
- If n = 4, you will lose. Because no matter how many you take, you will leave some stones behind for your friend to take and win the game. So in order to win, you have to ensure that you never reach the situation where there are exactly four stones left when your turn comes up.
- Similarly, if there are 5, 6, or 7 stones you can win by taking just enough to leave 4 stones for your friend. But if there are 8 stones on the pile, you will lose because regardless of whether you pick 1, 2 or 3 stones, your friend can pick 3, 2 or 1 stone to ensure that, again, 4 stones will be left for you.
- It is obvious that the same pattern repeats, so you will always lose if n % 4 == 0.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool checkWin( int n)
{
if (n % 4 != 0)
return true ;
return false ;
}
int main()
{
int n = 4;
if (checkWin(n))
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}
|
Java
import java.io.*;
class GFG {
static boolean checkWin( int n)
{
if (n % 4 != 0 )
return true ;
return false ;
}
public static void main (String[] args) {
int n = 4 ;
if (checkWin(n))
System.out.println( "YES" );
else
System.out.println( "NO" );
}
}
|
python 3
def checkWin( n):
if (n % 4 ! = 0 ):
return True
return False
if __name__ = = "__main__" :
n = 4
if (checkWin(n)):
print ( "YES" )
else :
print ( "NO" )
|
C#
using System;
public class GFG{
static bool checkWin( int n)
{
if (n % 4 != 0)
return true ;
return false ;
}
static public void Main (){
int n = 4;
if (checkWin(n))
Console.WriteLine( "YES" );
else
Console.WriteLine( "NO" );
}
}
|
Javascript
<script>
function checkWin(n)
{
if (n % 4 != 0)
return true ;
return false ;
}
let n = 4;
if (checkWin(n))
document.write( "YES" );
else
document.write( "NO" );
</script>
|
PHP
<?php
function checkWin( $n )
{
if ( $n % 4 != 0)
return true;
return false;
}
$n = 4;
if (checkWin( $n ))
echo "YES" , "\n" ;
else
echo "NO" , "\n" ;
?>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Last Updated :
02 Nov, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...