Predict the winner of the game on the basis of absolute difference of sum by selecting numbers (original) (raw)

Last Updated : 23 Mar, 2023

Given an array of N numbers. Two players X and Y play a game where at every step one player selects a number. One number can be selected only once. After all the numbers have been selected, player X wins if the absolute difference between the sum of numbers collected by X and Y is divisible by 4, else Y wins.
Note: Player X starts the game and numbers are selected optimally at every step.
Examples:

Input: a[] = {4, 8, 12, 16}
Output: X
X chooses 4
Y chooses 12
X chooses 8
Y chooses 16
|(4 + 8) - (12 + 16)| = |12 - 28| = 16 which is divisible by 4.
Hence, X wins
Input: a[] = {7, 9, 1}
Output: Y

Approach: The following steps can be followed to solve the problem:

Below is the implementation of the above approach:

C++ `

// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;

// Function to decide the winner int decideWinner(int a[], int n) { int count0 = 0; int count1 = 0; int count2 = 0; int count3 = 0;

// Iterate for all numbers in the array
for (int i = 0; i < n; i++) {

    // Condition to count

    // If mod gives 0
    if (a[i] % 4 == 0)
        count0++;

    // If mod gives 1
    else if (a[i] % 4 == 1)
        count1++;

    // If mod gives 2
    else if (a[i] % 4 == 2)
        count2++;

    // If mod gives 3
    else if (a[i] % 4 == 3)
        count3++;
}

// Check the winning condition for X
if (count0 % 2 == 0
    && count1 % 2 == 0
    && count2 % 2 == 0
    && count3 % 2 == 0)
    return 1;
else
    return 2;

}

// Driver code int main() {

int a[] = { 4, 8, 5, 9 };
int n = sizeof(a) / sizeof(a[0]);
if (decideWinner(a, n) == 1)
    cout << "X wins";
else
    cout << "Y wins";

return 0;

}

Java

// Java implementation of the approach class GFG {

// Function to decide the winner static int decideWinner(int []a, int n) { int count0 = 0; int count1 = 0; int count2 = 0; int count3 = 0;

// Iterate for all numbers in the array
for (int i = 0; i < n; i++)
{

    // Condition to count

    // If mod gives 0
    if (a[i] % 4 == 0)
        count0++;

    // If mod gives 1
    else if (a[i] % 4 == 1)
        count1++;

    // If mod gives 2
    else if (a[i] % 4 == 2)
        count2++;

    // If mod gives 3
    else if (a[i] % 4 == 3)
        count3++;
}

// Check the winning condition for X
if (count0 % 2 == 0 && count1 % 2 == 0 && 
    count2 % 2 == 0 && count3 % 2 == 0)
    return 1;
else
    return 2;

}

// Driver code public static void main(String args[]) { int []a = { 4, 8, 5, 9 }; int n = a.length; if (decideWinner(a, n) == 1) System.out.print("X wins"); else System.out.print("Y wins"); } }

// This code is contributed by Akanksha Rai

Python3

Python3 implementation of the approach

Function to decide the winner

def decideWinner(a, n): count0 = 0 count1 = 0 count2 = 0 count3 = 0

# Iterate for all numbers in the array
for i in range(n):

    # Condition to count

    # If mod gives 0
    if (a[i] % 4 == 0):
        count0 += 1

    # If mod gives 1
    elif (a[i] % 4 == 1):
        count1 += 1

    # If mod gives 2
    elif (a[i] % 4 == 2):
        count2 += 1

    # If mod gives 3
    elif (a[i] % 4 == 3):
        count3 += 1

# Check the winning condition for X
if (count0 % 2 == 0 and count1 % 2 == 0 and 
    count2 % 2 == 0 and count3 % 2 == 0):
    return 1
else:
    return 2

Driver code

a = [4, 8, 5, 9] n = len(a) if (decideWinner(a, n) == 1): print("X wins") else: print("Y wins")

This code is contributed by mohit kumar

C#

// C# implementation of the approach using System; class GFG {

// Function to decide the winner static int decideWinner(int []a, int n) { int count0 = 0; int count1 = 0; int count2 = 0; int count3 = 0;

// Iterate for all numbers in the array
for (int i = 0; i < n; i++)
{

    // Condition to count

    // If mod gives 0
    if (a[i] % 4 == 0)
        count0++;

    // If mod gives 1
    else if (a[i] % 4 == 1)
        count1++;

    // If mod gives 2
    else if (a[i] % 4 == 2)
        count2++;

    // If mod gives 3
    else if (a[i] % 4 == 3)
        count3++;
}

// Check the winning condition for X
if (count0 % 2 == 0 && count1 % 2 == 0 && 
    count2 % 2 == 0 && count3 % 2 == 0)
    return 1;
else
    return 2;

}

// Driver code public static void Main() { int []a = { 4, 8, 5, 9 }; int n = a.Length; if (decideWinner(a, n) == 1) Console.Write("X wins"); else Console.Write("Y wins"); } }

// This code is contributed by Akanksha Rai

PHP

i<i < i<n; $i++) { // Condition to count // If mod gives 0 if ($a[$i] % 4 == 0) $count0++; // If mod gives 1 else if ($a[$i] % 4 == 1) $count1++; // If mod gives 2 else if ($a[$i] % 4 == 2) $count2++; // If mod gives 3 else if ($a[$i] % 4 == 3) $count3++; } // Check the winning condition for X if ($count0 % 2 == 0 && $count1 % 2 == 0 && count2count2 % 2 == 0 && count2count3 % 2 == 0) return 1; else return 2; } // Driver code $a = array( 4, 8, 5, 9 ); n=count(n = count(n=count(a); if (decideWinner($a, $n) == 1) echo "X wins"; else echo "Y wins"; // This code is contributed by Ryuga ?>

JavaScript

`

Time Complexity: O(n)

Auxiliary Space: O(1)