Given an array arr[] consisting of N integers. Two players, Player 1 and Player 2, play turn-by-turn in which one player can may either of the following two moves:
- Convert even array element to any other integer.
- Remove odd array element.
The player who is not able to make any move loses the game. The task is to print the winner of the game. Print -1 if the game may go on forever.
Examples:
Input: arr[] = {3, 1, 9, 7}
Output: Player 2
Explanation: Since all array elements are odd, no conversion is possible.
Turn 1: Player 1 deletes 3.
Turn 2: Player 2 deletes 1.
Turn 3: Player 1 deletes 9.
Turn 4: Player 2 deletes 7. Now, Player 1 has no moves left. Therefore, Player 2 wins the game.Input: arr[]={4, 8}
Output: -1
Approach: Follow the steps below to solve the problem:
- Traverse the array.
- Count the number of even and odd elements present in the array.
- If the number of even elements is zero, perform the following operations:
- If the count of odd is even, then Player 2 will win the game.
- Otherwise, Player 1 will win the game.
- If the count of odd is odd and only one even element is present in the array, then Player 1 will win the game.
- Otherwise, there will be a draw every time.
Below is the implementation of the above approach:
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to evaluate the // winner of the game void findWinner( int arr[], int N)
{ // Stores count of odd
// array elements
int odd = 0;
// Stores count of even
// array elements
int even = 0;
// Traverse the array
for ( int i = 0; i < N; i++) {
// If array element is odd
if (arr[i] % 2 == 1) {
odd++;
}
// Otherwise
else {
even++;
}
}
// If count of even is zero
if (even == 0) {
// If count of odd is even
if (odd % 2 == 0) {
cout << "Player 2" << endl;
}
// If count of odd is odd
else if (odd % 2 == 1) {
cout << "Player 1" << endl;
}
}
// If count of odd is odd and
// count of even is one
else if (even == 1 && odd % 2 == 1) {
cout << "Player 1" << endl;
}
// Otherwise
else {
cout << -1 << endl;
}
} // Driver Code int main()
{ int arr[] = { 3, 1, 9, 7 };
int N = sizeof (arr)
/ sizeof (arr[0]);
findWinner(arr, N);
return 0;
} |
// Java program for the above approach import java.util.*;
class GFG{
// Function to evaluate the // winner of the game static void findWinner( int arr[], int N)
{ // Stores count of odd
// array elements
int odd = 0 ;
// Stores count of even
// array elements
int even = 0 ;
// Traverse the array
for ( int i = 0 ; i < N; i++)
{
// If array element is odd
if (arr[i] % 2 == 1 )
{
odd++;
}
// Otherwise
else
{
even++;
}
}
// If count of even is zero
if (even == 0 )
{
// If count of odd is even
if (odd % 2 == 0 )
{
System.out.println( "Player 2" );
}
// If count of odd is odd
else if (odd % 2 == 1 )
{
System.out.println( "Player 1" );
}
}
// If count of odd is odd and
// count of even is one
else if (even == 1 && odd % 2 == 1 )
{
System.out.println( "Player 1" );
}
// Otherwise
else
{
System.out.println(- 1 );
}
} // Driver Code public static void main(String args[])
{ int arr[] = { 3 , 1 , 9 , 7 };
int N = arr.length;
findWinner(arr, N);
} } // This code is contributed by ipg2016107 |
# Python3 program for the above approach # Function to evaluate the # winner of the game def findWinner(arr, N):
# Stores count of odd
# array elements
odd = 0
# Stores count of even
# array elements
even = 0
# Traverse the array
for i in range (N):
# If array element is odd
if (arr[i] % 2 = = 1 ):
odd + = 1
# Otherwise
else :
even + = 1
# If count of even is zero
if (even = = 0 ):
# If count of odd is even
if (odd % 2 = = 0 ):
print ( "Player 2" )
# If count of odd is odd
elif (odd % 2 = = 1 ):
print ( "Player 1" )
# If count of odd is odd and
# count of even is one
elif (even = = 1 and odd % 2 = = 1 ):
print ( "Player 1" )
# Otherwise
else :
print ( - 1 )
# Driver code if __name__ = = '__main__' :
arr = [ 3 , 1 , 9 , 7 ]
N = len (arr)
findWinner(arr, N)
# This code is contributed by Shivam Singh |
// C# program for the above approach using System;
class GFG{
// Function to evaluate the // winner of the game static void findWinner( int []arr, int N)
{ // Stores count of odd
// array elements
int odd = 0;
// Stores count of even
// array elements
int even = 0;
// Traverse the array
for ( int i = 0; i < N; i++)
{
// If array element is odd
if (arr[i] % 2 == 1)
{
odd++;
}
// Otherwise
else
{
even++;
}
}
// If count of even is zero
if (even == 0)
{
// If count of odd is even
if (odd % 2 == 0)
{
Console.WriteLine( "Player 2" );
}
// If count of odd is odd
else if (odd % 2 == 1)
{
Console.WriteLine( "Player 1" );
}
}
// If count of odd is odd and
// count of even is one
else if (even == 1 && odd % 2 == 1)
{
Console.WriteLine( "Player 1" );
}
// Otherwise
else
{
Console.WriteLine(-1);
}
} // Driver Code public static void Main()
{ int []arr = { 3, 1, 9, 7 };
int N = arr.Length;
findWinner(arr, N);
} } // This code is contributed by bgangwar59 |
<script> // JavaScript program to implement // the above approach // Function to evaluate the // winner of the game function findWinner(arr, N)
{ // Stores count of odd
// array elements
let odd = 0;
// Stores count of even
// array elements
let even = 0;
// Traverse the array
for (let i = 0; i < N; i++)
{
// If array element is odd
if (arr[i] % 2 == 1)
{
odd++;
}
// Otherwise
else
{
even++;
}
}
// If count of even is zero
if (even == 0)
{
// If count of odd is even
if (odd % 2 == 0)
{
document.write( "Player 2" );
}
// If count of odd is odd
else if (odd % 2 == 1)
{
document.write( "Player 1" );
}
}
// If count of odd is odd and
// count of even is one
else if (even == 1 && odd % 2 == 1)
{
document.write( "Player 1" );
}
// Otherwise
else
{
document.write(-1);
}
} // Driver Code let arr = [ 3, 1, 9, 7 ];
let N = arr.length;
findWinner(arr, N);
</script> |
Player 2
Time Complexity: O(N)
Auxiliary Space: O(1)