In this HackerRank Game of Stones problem solution we have given the starting number of stones, find and print the name of the winner. P1 is named First and P2 is named Second. Each player plays optimally, meaning they will not make a move that causes them to lose the game if a winning move exists.

HackerRank Game of Stones problem solution


Problem solution in Python.

T = int(input())
for _ in range(T):
    N = int(input())
    if N % 7 > 1 :
        print("First")
    else:
        print("Second")


Problem solution in Java.

import java.util.Scanner;

public class Solution {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		while(T-->0)
		{
			int n = sc.nextInt();
			dp = new Boolean[n+1];
			System.out.println(wins(n)? "Second" : "First");
		}
	}
	
	static Boolean dp[];
	static boolean wins(int n)
	{
		if(n <= 1)
			return true;
		if(dp[n] != null)
			return dp[n];
		
		return dp[n] = !(wins(n-2) || wins(n-3) || (wins(n-5)));
	}
}


Problem solution in C++.

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */   
    int t;
    cin>>t;
    while(t--)
        {
        int n;
        cin>>n;
        if(n%7==0 || n%7==1)
            cout<<"Second"<<endl;
        else
            cout<<"First"<<endl;
    }
    return 0;
}


Problem solution in C.

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {

    /* Enter your code here. Read input from STDIN. Print output to STDOUT */    
    int n;
    scanf("%d\n",&n);
    int j;
    for (int i =0; i<n;i++){
        scanf("%d\n",&j);
        
        j=j%7;
        if(j<=1){
            printf("Second\n");
        }else{
            printf("First\n");
        }
            
    }
    return 0;
}