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 memebers from group 1 ` ` ` `// and a single memeber from group 2 ` ` ` `if` `(N1 > N2) { ` ` ` `N1 -= 2; ` ` ` `N2 -= 1; ` ` ` `} ` ` ` ` ` `// Choose 2 memebers from group 2 ` ` ` `// and a single memeber 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; ` `} ` |

*chevron_right*

*filter_none*

## 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 memebers from group 1 ` ` ` `// and a single memeber from group 2 ` ` ` `if` `(N1 > N2) { ` ` ` `N1 -= ` `2` `; ` ` ` `N2 -= ` `1` `; ` ` ` `} ` ` ` ` ` `// Choose 2 memebers from group 2 ` ` ` `// and a single memeber 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 ` |

*chevron_right*

*filter_none*

## 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 memebers from group 1 ` ` ` `# and a single memeber from group 2 ` ` ` `if` `(N1 > N2): ` ` ` `N1 ` `-` `=` `2` ` ` `N2 ` `-` `=` `1` ` ` ` ` ` ` `# Choose 2 memebers from group 2 ` ` ` `# and a single memeber 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 ` |

*chevron_right*

*filter_none*

## 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 memebers from group 1 ` ` ` `// and a single memeber from group 2 ` ` ` `if` `(N1 > N2) { ` ` ` `N1 -= 2; ` ` ` `N2 -= 1; ` ` ` `} ` ` ` ` ` `// Choose 2 memebers from group 2 ` ` ` `// and a single memeber 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 ` |

*chevron_right*

*filter_none*

## 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 memebers from group 1 ` ` ` `// and a single memeber from group 2 ` ` ` `if` `(` `$N1` `> ` `$N2` `) ` ` ` `{ ` ` ` `$N1` `-= 2; ` ` ` `$N2` `-= 1; ` ` ` `} ` ` ` ` ` `// Choose 2 memebers from group 2 ` ` ` `// and a single memeber 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 ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

3

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Minimum and Maximum number of pairs in m teams of n people
- Given number of matches played, find number of teams in tournament
- Ways of dividing a group into two halves such that two elements are in different groups
- Maximum number of strings that can be formed with given zeros and ones
- Ways to form a group from three groups with given constraints
- Count of groups among N people having only one leader in each group
- Count of distinct XORs formed by rearranging two Binary strings
- Number of triangles formed from a set of points on three lines
- Number of triangles that can be formed with given N points
- Number of ways in which the substring in range [L, R] can be formed using characters out of the range
- Number of triangles formed by joining vertices of n-sided polygon with one side common
- Find the number of words of X vowels and Y consonants that can be formed from M vowels and N consonants
- Number of cycles formed by joining vertices of n sided polygon at the center
- Number of quadrilateral formed with N distinct points on circumference of Circle
- Print all possible strings of length k that can be formed from a set of n characters
- Sum of all numbers that can be formed with permutations of n digits
- All possible strings of any length that can be formed from a given string
- Find trace of matrix formed by adding Row-major and Column-major order of same matrix
- Sum of product of all subsets formed by only divisors of N
- N digit numbers divisible by 5 formed from the M digits

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.