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++
#include <bits/stdc++.h>
using namespace std;
void findWinner( int arr[], int N)
{
int odd = 0;
int even = 0;
for ( int i = 0; i < N; i++) {
if (arr[i] % 2 == 1) {
odd++;
}
else {
even++;
}
}
if (even == 0) {
if (odd % 2 == 0) {
cout << "Player 2" << endl;
}
else if (odd % 2 == 1) {
cout << "Player 1" << endl;
}
}
else if (even == 1 && odd % 2 == 1) {
cout << "Player 1" << endl;
}
else {
cout << -1 << endl;
}
}
int main()
{
int arr[] = { 3, 1, 9, 7 };
int N = sizeof (arr)
/ sizeof (arr[0]);
findWinner(arr, N);
return 0;
}
|
Java
import java.util.*;
class GFG{
static void findWinner( int arr[], int N)
{
int odd = 0 ;
int even = 0 ;
for ( int i = 0 ; i < N; i++)
{
if (arr[i] % 2 == 1 )
{
odd++;
}
else
{
even++;
}
}
if (even == 0 )
{
if (odd % 2 == 0 )
{
System.out.println( "Player 2" );
}
else if (odd % 2 == 1 )
{
System.out.println( "Player 1" );
}
}
else if (even == 1 && odd % 2 == 1 )
{
System.out.println( "Player 1" );
}
else
{
System.out.println(- 1 );
}
}
public static void main(String args[])
{
int arr[] = { 3 , 1 , 9 , 7 };
int N = arr.length;
findWinner(arr, N);
}
}
|
Python3
def findWinner(arr, N):
odd = 0
even = 0
for i in range (N):
if (arr[i] % 2 = = 1 ):
odd + = 1
else :
even + = 1
if (even = = 0 ):
if (odd % 2 = = 0 ):
print ( "Player 2" )
elif (odd % 2 = = 1 ):
print ( "Player 1" )
elif (even = = 1 and odd % 2 = = 1 ):
print ( "Player 1" )
else :
print ( - 1 )
if __name__ = = '__main__' :
arr = [ 3 , 1 , 9 , 7 ]
N = len (arr)
findWinner(arr, N)
|
C#
using System;
class GFG{
static void findWinner( int []arr, int N)
{
int odd = 0;
int even = 0;
for ( int i = 0; i < N; i++)
{
if (arr[i] % 2 == 1)
{
odd++;
}
else
{
even++;
}
}
if (even == 0)
{
if (odd % 2 == 0)
{
Console.WriteLine( "Player 2" );
}
else if (odd % 2 == 1)
{
Console.WriteLine( "Player 1" );
}
}
else if (even == 1 && odd % 2 == 1)
{
Console.WriteLine( "Player 1" );
}
else
{
Console.WriteLine(-1);
}
}
public static void Main()
{
int []arr = { 3, 1, 9, 7 };
int N = arr.Length;
findWinner(arr, N);
}
}
|
Javascript
<script>
function findWinner(arr, N)
{
let odd = 0;
let even = 0;
for (let i = 0; i < N; i++)
{
if (arr[i] % 2 == 1)
{
odd++;
}
else
{
even++;
}
}
if (even == 0)
{
if (odd % 2 == 0)
{
document.write( "Player 2" );
}
else if (odd % 2 == 1)
{
document.write( "Player 1" );
}
}
else if (even == 1 && odd % 2 == 1)
{
document.write( "Player 1" );
}
else
{
document.write(-1);
}
}
let arr = [ 3, 1, 9, 7 ];
let N = arr.length;
findWinner(arr, N);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)