You are given an integer n
, the number of teams in a tournament that has strange rules:
n / 2
matches are played, and n / 2
teams advance to the next round.(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
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
Enter the number of teams:
At line 8 of file temp.f95 (unit = 5, file = 'stdin') Fortran runtime error: End of file Error termination. Backtrace: #0 0x7afe21d8e960 in ??? #1 0x7afe21d8f4d9 in ??? #2 0x7afe21fe317b in ??? #3 0x7afe21fdc684 in ??? #4 0x7afe21fdd2aa in ??? #5 0x5be604c3c2ec in MAIN__ #6 0x5be604c3c3e9 in main
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
temp.f95:8:34: 8 | matches = tournament_matches(n) | 1 Error: Return type mismatch of function ‘tournament_matches’ at (1) (UNKNOWN/INTEGER(4)) temp.f95:8:16: 8 | matches = tournament_matches(n) | 1 Error: Function ‘tournament_matches’ at (1) has no IMPLICIT type
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.
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.