Game of stones - GeeksforGeeks

10 May, 2021
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 whether you’ll win or not. A player (on his/her turn) can remove 1 or 2 or 3 coins, 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 last set of coins always wins. Print YES if you can win the game else print NO. Examples:  
Input: N = 4 Output: NO 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 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 stone and your friend is not able to make the 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 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, if n % 4 == 0 then you will always lose.
Below is the implementation of the above approach: 
C++
Java
python 3
C#
PHP
Javascript
// C++ program of game of stones#include <bits/stdc++.h>using namespace std; // Function that returns true if u winbool checkWin(int n){    if (n % 4 != 0)        return true;    return false;} // Driver codeint main(){    // n is number of stones    int n = 4;     if (checkWin(n))        cout << "YES" << endl;    else        cout << "NO" << endl;    return 0;}
// Java program of game of stonesimport java.io.*; class GFG {    // Function that returns true if u winstatic boolean checkWin(int n){    if (n % 4 != 0)        return true;    return false;} // Driver code    public static void main (String[] args) {         // n is number of stones    int n = 4;     if (checkWin(n))            System.out.println("YES");    else            System.out.println( "NO");             }//This code is contributed by akt_mit   }
# Python3 program of game of stones  # Function that returns true if u windef checkWin( n):     if (n % 4 != 0):        return True    return False  # Driver codeif __name__ == "__main__":     # n is number of stones    n = 4      if (checkWin(n)):        print ( "YES")    else:        print ("NO")
//C#  program of game of stonesusing System; public class GFG{// Function that returns true if u winstatic bool checkWin(int n){    if (n % 4 != 0)        return true;    return false;} // Driver code         static public void Main (){             // n is number of stones    int n = 4;     if (checkWin(n))            Console.WriteLine("YES");    else            Console.WriteLine( "NO");             }//This code is contributed by ajit}
<?php// PHP program of game of stones // Function that returns// true if u winfunction checkWin($n){    if ($n % 4 != 0)        return true;    return false;} // Driver code // n is number of stones$n = 4; if (checkWin($n))    echo "YES","\n" ;else    echo "NO","\n" ; // This code is contributed// by ANKITRAI1?>
<script>    // Javascript program of game of stones         // Function that returns true if u win    function checkWin(n)    {        if (n % 4 != 0)            return true;        return false;    }         // n is number of stones    let n = 4;       if (checkWin(n))          document.write("YES");    else          document.write( "NO");         </script>
NO
 
jit_t
ankthon
ukasp
divyesh072019
Modular Arithmetic
School Programming
Modular Arithmetic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Interfaces in Java
Operator Overloading in C++
Copy Constructor in C++
Polymorphism in C++
Friend class and function in C++
Introduction To PYTHON
Types of Operating Systems
Overriding in Java
Constructors in Java
Exceptions in Java