2015年6月7日 星期日

d074:電腦教室 (24)

d074: 電腦教室 (24)

更新時間:2016/12/21
內容
  蝸牛老師在一個優質高中擔任電腦老師,在學校裡有一個他專用的電腦教室。最近學校有一筆經費要幫這個電腦教室更新電腦。學校的原則是,每個上課的學生都要有自己的電腦,但是不希望購買多餘的電腦。給你蝸牛老師的任教班級數及每班人數,請你幫他算出要買幾部新電腦給學生使用。
輸入說明
  輸入只有兩行。第一行有一個正整數 n,代表蝸牛老師的任教班級數。第二行有 n 個由空白隔開的正整數,代表各班人數。
輸出說明
  輸出需購買的電腦數量。
範例輸入
  5
  42 39 41 43 30
範例輸出
  43
提示
背景知識
  迴圈



想一想,再看解答~


我的解題想法
  只要能夠找出任教班級的「最大」學生人數,此題即完成。

程式碼
#include <stdio.h>
int main(void){
    int n,max,tmp;
    scanf("%d",&n);
    scanf("%d",&max);
    for(int i=1;i<n;i++){
        scanf("%d",&tmp);
        if(max<tmp){
            max = tmp;
        }
    }
    printf("%d",max);
    return 0;
}
程式碼解析
#1:引入標準輸入/輸出串流。
#2:主程式開始,回傳引數int,沒有參數。
#3:宣告3個整數(int)變數「n」、「max」、「tmp」,範圍–2,147,483,648 到 2,147,483,647。
#4:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「n」。
#5:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「max」。先抓取第一個班級人數當作最大值,如有第二個班級人數,就進行比較取出最大值。
#6:迴圈 for 開始。區域變數「i」,從 1 開始到小於 n 結束 (int i=1;i<n;i++)。
#7:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「tmp」。暫存班級人數,與最大值 max 比較用。
#8:邏輯判斷式 if 開始。判斷 目前最大的班級人數 max 是否小於 tmp。
#9:把 tmp 的值指定給 max。
#10:邏輯判斷式 if 結束。
#11:迴圈 for 結束。
#12:將格式化數據顯示到標準輸出。輸出1個整數(%d)「max」。
#13:主程式回傳整數「0」。
#14:主程式結束。





進階想法
  不使用邏輯判斷式 if、switch、?:等......,找出最大值。
  max = (max >= tmp)*max + (max < tmp)*tmp

程式碼
#include <stdio.h>
int main(void){
    int n,max,tmp;
    scanf("%d",&n);
    scanf("%d",&max);
    for(int i=1;i<n;i++){
        scanf("%d",&tmp);
        max = (max >= tmp)*max + (max < tmp)*tmp;
    }
    printf("%d",max);
    return 0;
}
程式碼解析
#1:引入標準輸入/輸出串流。
#2:主程式開始,回傳引數int,沒有參數。
#3:宣告3個整數(int)變數「n」、「max」、「tmp」,範圍–2,147,483,648 到 2,147,483,647。
#4:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「n」。
#5:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「max」。先抓取第一個班級人數當作最大值,如有第二個班級人數,就進行比較取出最大值。
#6:迴圈 for 開始。區域變數「i」,從 1 開始到小於 n 結束 (int i=1;i<n;i++)。
#7:從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「tmp」。暫存班級人數,與最大值 max 比較用。
#8:直接尋找最大值。如果 (max >= tmp) 成立,為true(1),否則為false(0);如果 (max < tmp) 成立,為true(1),否則為false(0)。
#9:迴圈 for 結束。
#10:將格式化數據顯示到標準輸出。輸出1個整數(%d)「max」。
#11:主程式回傳整數「0」。
#12:主程式結束。