# 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 = 8Output: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 = 5Output: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>` |

**Output:**

3

**Time Complexity:** O(min(N1,N2))**Auxiliary Space: **O(1)