Maximum number of 3-person teams formed from two groups
Given two integers N1 and N2 where, N1 is the number of people in group 1 and N2 is the number of people in group 2. The task is to count the maximum number of 3-person teams that can be formed when at least a single person is chosen from both the groups.
Examples:
Input: N1 = 2, N2 = 8
Output: 2
Team 1: 2 members from group 2 and 1 member from group 1
Update: N1 = 1, N2 = 6
Team 2: 2 members from group 2 and 1 member from group 1
Update: N1 = 0, N2 = 4
No further teams can be formed.
Input: N1 = 4, N2 = 5
Output: 3
Approach: Choose a single person from the team with less members and choose 2 persons from the team with more members (while possible) and update count = count + 1. Print the count in the end.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to return the count // of maximum teams possible int maxTeams( int N1, int N2) { int count = 0; // While it is possible to form a team while (N1 > 0 && N2 > 0 && N1 + N2 >= 3) { // Choose 2 members from group 1 // and a single member from group 2 if (N1 > N2) { N1 -= 2; N2 -= 1; } // Choose 2 members from group 2 // and a single member from group 1 else { N1 -= 1; N2 -= 2; } // Update the count count++; } // Return the count return count; } // Driver code int main() { int N1 = 4, N2 = 5; cout << maxTeams(N1, N2); return 0; } |
Java
// Java implementation of the approach class GFG { // Function to return the count // of maximum teams possible static int maxTeams( int N1, int N2) { int count = 0 ; // While it is possible to form a team while (N1 > 0 && N2 > 0 && N1 + N2 >= 3 ) { // Choose 2 members from group 1 // and a single member from group 2 if (N1 > N2) { N1 -= 2 ; N2 -= 1 ; } // Choose 2 members from group 2 // and a single member from group 1 else { N1 -= 1 ; N2 -= 2 ; } // Update the count count++; } // Return the count return count; } // Driver code public static void main(String []args) { int N1 = 4 , N2 = 5 ; System.out.println(maxTeams(N1, N2)); } } // This code is contributed by ihritik |
Python3
# Python3 implementation of the approach # Function to return the count # of maximum teams possible def maxTeams(N1, N2): count = 0 # While it is possible to form a team while (N1 > 0 and N2 > 0 and N1 + N2 > = 3 ) : # Choose 2 members from group 1 # and a single member from group 2 if (N1 > N2): N1 - = 2 N2 - = 1 # Choose 2 members from group 2 # and a single member from group 1 else : N1 - = 1 N2 - = 2 # Update the count count = count + 1 # Return the count return count # Driver code N1 = 4 N2 = 5 print (maxTeams(N1, N2)) # This code is contributed by ihritik |
C#
// C# implementation of the approach using System; class GFG { // Function to return the count // of maximum teams possible static int maxTeams( int N1, int N2) { int count = 0; // While it is possible to form a team while (N1 > 0 && N2 > 0 && N1 + N2 >= 3) { // Choose 2 members from group 1 // and a single member from group 2 if (N1 > N2) { N1 -= 2; N2 -= 1; } // Choose 2 members from group 2 // and a single member from group 1 else { N1 -= 1; N2 -= 2; } // Update the count count++; } // Return the count return count; } // Driver code public static void Main() { int N1 = 4, N2 = 5; Console.WriteLine(maxTeams(N1, N2)); } } // This code is contributed by ihritik |
PHP
<?php // PHP implementation of the approach // Function to return the count // of maximum teams possible function maxTeams( $N1 , $N2 ) { $count = 0 ; // While it is possible to form a team while ( $N1 > 0 && $N2 > 0 && $N1 + $N2 >= 3) { // Choose 2 members from group 1 // and a single member from group 2 if ( $N1 > $N2 ) { $N1 -= 2; $N2 -= 1; } // Choose 2 members from group 2 // and a single member from group 1 else { $N1 -= 1; $N2 -= 2; } // Update the count $count ++; } // Return the count return $count ; } // Driver code $N1 = 4 ; $N2 = 5 ; echo maxTeams( $N1 , $N2 ); // This code is contributed by Ryuga ?> |
Javascript
<script> // Javascript implementation of the approach // Function to return the count // of maximum teams possible function maxTeams(N1, N2) { let count = 0; // While it is possible to form a team while (N1 > 0 && N2 > 0 && N1 + N2 >= 3) { // Choose 2 members from group 1 // and a single member from group 2 if (N1 > N2) { N1 -= 2; N2 -= 1; } // Choose 2 members from group 2 // and a single member from group 1 else { N1 -= 1; N2 -= 2; } // Update the count count++; } // Return the count return count; } let N1 = 4, N2 = 5; document.write(maxTeams(N1, N2)); // This code is contributed by divyeshrabadiya07. </script> |
3
Time Complexity: O(min(N1,N2))
Auxiliary Space: O(1)