
問題描述小R正在組織一個比賽比賽中有n支隊伍參賽。比賽遵循以下獨特的賽制如果當前隊伍數為偶數那么每支隊伍都會與另一支隊伍配對。總共進行n / 2場比賽且產生n / 2支隊伍進入下一輪。如果當前隊伍數為奇數那么將會隨機輪空并晉級一支隊伍其余的隊伍配對。總共進行(n - 1) / 2場比賽且產生(n - 1) / 2 1支隊伍進入下一輪。小R想知道在比賽中進行的總比賽場次即所有輪次比賽場次之和直到決出唯一的獲勝隊伍為止。輸入格式輸入為一個整數n1 ≤ n ≤ 10^6表示初始隊伍數量。輸出格式輸出一個整數表示比賽的總場次。測試樣例樣例1輸入7輸出6解釋第一輪7 支隊伍奇數進行 (7-1)/2 3 場比賽晉級 3 1 4 支隊伍。第二輪4 支隊伍偶數進行 4/2 2 場比賽晉級 2 支隊伍。第三輪2 支隊伍偶數進行 2/2 1 場比賽晉級 1 支隊伍冠軍。 總比賽場次 3 2 1 6。樣例2輸入14輸出13解釋第一輪14 支隊伍偶數進行 14/2 7 場比賽晉級 7 支隊伍。第二輪7 支隊伍奇數進行 (7-1)/2 3 場比賽晉級 3 1 4 支隊伍。第三輪4 支隊伍偶數進行 4/2 2 場比賽晉級 2 支隊伍。第四輪2 支隊伍偶數進行 2/2 1 場比賽晉級 1 支隊伍冠軍。 總比賽場次 7 3 2 1 13。樣例3輸入1輸出0解釋只有 1 支隊伍無需比賽直接晉級總比賽場次為 0。約束條件1 ≤ n ≤ 10^6程序代碼#include stdio.hint totalMatches(int n) {// 每場比賽淘汰1支隊伍淘汰 n-1 支隊伍需要 n-1 場比賽return n - 1;}int main() {int n;scanf(%d, n);printf(%d\n, totalMatches(n));return 0;}#include stdio.h int totalMatches(int n) { // 每場比賽淘汰1支隊伍淘汰 n-1 支隊伍需要 n-1 場比賽 return n - 1; } int main() { int n; scanf(%d, n); printf(%d\n, totalMatches(n)); return 0; }運行結果