2015年5月22日 星期五

d461:班際籃球賽(2)

d461: 班際籃球賽(2)

更新時間:2016/12/20
內容
  又到了一年一度班際籃球賽的季節了,今年有 10 個班級組隊參加,比賽採單淘汰制,學校所排的賽程如下:
為了公平起見,學校在排賽程時,有兩個規定:

(1) 每個隊伍要取得冠軍所需贏得的比賽場數的差異不能大於一場。例如 101 贏 3 場可以獲得冠軍,但是 102 卻必須贏 4 場才可以獲得冠軍,其差異沒有大於一場。
(2) 每一場比賽的兩個隊伍必須由兩個隊數差異不大於一隊的組別所產生。例如 101, 102, 103 這三隊所產生的優勝隊伍必須和 104, 105 這兩隊所產生的隊伍比賽,兩邊所包含的隊伍數差異不大於一隊。
在這兩個規則下,請幫忙計算如果有 n 個隊伍報名參賽,至少必須舉辦幾場比賽才能產生一個冠軍隊伍。
輸入說明
  輸入只有一行,包含一個整數n,代表報名參賽的隊伍數目。
輸出說明
  請輸出一個整數,代表至少必須舉辦幾場比賽。
範例輸入
  10
範例輸出
  9

想一想,再看解答~


我的解題想法:
  因為是單淘汰制,故比賽一場,淘汰一隊。
  試著想像一下冠軍隊伍的誕生。到最後只有一個隊伍贏得最後的勝利,意思是將會有n-1個隊伍將被淘汰!


程式碼:
#include <stdio.h>
int main(void){
    int n;
    scanf("%d",&n);
    printf("%d",n-1);
    return 0;
}
程式碼解析
#1:引入標準輸入/輸出串流。
#2:主程式開始,回傳引數int,沒有參數。
#3:宣告一個整數(int)變數「n」,範圍–2,147,483,648 到 2,147,483,647。
#4:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「n」。
#5:將格式化數據顯示到標準輸出。輸出1個整數(%d)「n-1」。
#6:主程式回傳整數「0」。
#7:主程式結束。