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: | 主程式結束。 |