Count of Matches in Tournament

🏠 ⬅️ ➡️

You are given an integer n, the number of teams in a tournament that has strange rules:

  • If the current number of teams is even, each team gets paired with another team. A total of n / 2 matches are played, and n / 2 teams advance to the next round.
  • If the current number of teams is odd, one team randomly advances in the tournament, and the rest gets paired. A total of (n - 1) / 2 matches are played, and (n - 1) / 2 + 1 teams advance to the next round.

Return the number of matches played in the tournament until a winner is decided.

Example 1:

Input: n = 7 Output: 6 Explanation: Details of the tournament: - 1st Round: Teams = 7, Matches = 3, and 4 teams advance. - 2nd Round: Teams = 4, Matches = 2, and 2 teams advance. - 3rd Round: Teams = 2, Matches = 1, and 1 team is declared the winner. Total number of matches = 3 + 2 + 1 = 6.

Example 2:

Input: n = 14 Output: 13 Explanation: Details of the tournament: - 1st Round: Teams = 14, Matches = 7, and 7 teams advance. - 2nd Round: Teams = 7, Matches = 3, and 4 teams advance. - 3rd Round: Teams = 4, Matches = 2, and 2 teams advance. - 4th Round: Teams = 2, Matches = 1, and 1 team is declared the winner. Total number of matches = 7 + 3 + 2 + 1 = 13.

Constraints:

  • 1 <= n <= 200

Note: This problem is from LeetCode.
Compiled
Executed
Correct
program main
    implicit none

    integer :: n
    integer :: result

    print '(A)', 'Enter the number of teams:'
    read *, n

    result = solve_problem(n)

    print '(A, I0)', 'The number of matches played in the tournament until a winner is decided is: ', result

contains

    function solve_problem(n) result(result_)
        implicit none

        integer, intent(in) :: n
        integer :: result_

        if (mod(n, 2) == 0) then
            ! Even number of teams
            result_ = n / 2
        else
            ! Odd number of teams
            result_ = (n - 1) / 2 + 1
        end if

    end function solve_problem

end program main
Compiled
Executed
Correct
PROGRAM tournament
      IMPLICIT NONE

      INTEGER, PARAMETER :: n = 7

      INTEGER :: matches

      matches = tournament_matches(n)

      WRITE (*,*) "Number of matches: ", matches

      END PROGRAM tournament

      FUNCTION tournament_matches(n) RESULT(matches)
      IMPLICIT NONE

      INTEGER, INTENT(IN) :: n
      INTEGER :: matches

      IF (MODULO(n, 2) == 0) THEN
          matches = n / 2
      ELSE
          matches = (n - 1) / 2
      END IF

      END FUNCTION tournament_matches
🌐 Data from online sources
def numberOfMatches(n: int) -> int:
    matches = 0
    while n > 1:
        matches += n // 2
        n = (n + 1) // 2
    return matches

The algorithm starts with n teams and initializes a matches counter with 0. In each iteration of the loop, it calculates the number of matches played in the current round and adds it to the matches counter. Then, the number of teams advancing to the next round is calculated as (n + 1) / 2. The loop continues until there is a single winner left, i.e., n === 1. Finally, the total number of matches played throughout the tournament is returned.

🌐 Data from online sources
int numberOfMatches(int n) {
    int matches = 0;
    while (n > 1) {
        matches += n / 2;
        n = (n + 1) / 2;
    }
    return matches;
}

The algorithm starts with n teams and initializes a matches counter with 0. In each iteration of the loop, it calculates the number of matches played in the current round and adds it to the matches counter. Then, the number of teams advancing to the next round is calculated as (n + 1) / 2. The loop continues until there is a single winner left, i.e., n === 1. Finally, the total number of matches played throughout the tournament is returned.