d460: 山六九之旅 (14)
更新時間:2016/12/20
內容:小華每年都會到「山六九」主題樂園去玩,但是隨著年齡的增加,每年要買的門票也不太一樣。給你小華的年齡,請你告訴我他今年的門票多少錢?
「山六九」主題樂園的票價表如下:
0 ~ 5 歲兒童免票
兒童票 (6 ~ 11 歲):590 元
青少年票 (12 ~ 17 歲):790 元
成人票 (18 ~ 59 歲):890 元
敬老票 (60歲以上):399 元
輸入說明:
輸入只有一行,內含一個整數 a (0≤a≤2147483647) 代表小華的年齡。
輸出說明:
依「山六九」的票價表,輸出一個整數,代表小華今年的門票價格。
範例輸入:
15
範例輸出:
750
提示:
背景知識:
算術及關係運算子
你可以只用算術及關係運算子,而不用 if、switch、或 ? : 來寫出這題嗎? (這是「挑戰」而不是「限制」,因為出題者不是系統管理員,不能限制你用這些指令。)
想一想,再看解答~
我的解題想法:
分層判斷年齡。使用邏輯判斷式if。
♠使用判斷式if-else的解法
程式碼:
#include <stdio.h> int main(void){ int a; scanf("%d",&a); if(a>=0 && a<=5){ printf("%d",0); }else if(a>=6 && a<=11){ printf("%d",590); }else if(a>=12 && a<=17){ printf("%d",790); }else if(a>=18 && a<=59){ printf("%d",890); }else{ printf("%d",399); } return 0; }程式碼解析:
#1: | 引入標準輸入/輸出串流。 |
#2: | 主程式開始,回傳引數int,沒有參數。 |
#3: | 宣告1個整數(int)變數「a」,範圍–2,147,483,648 到 2,147,483,647。 |
#4: | 從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「a」。 |
#5: | 邏輯判斷式 if 開始。判斷年齡是否介於0~5歲之間「a>=0 && a<=5」。 |
#6: | 將格式化數據顯示到標準輸出。輸出1個整數(%d)「0」。 |
#7: | 第二個邏輯判斷式 else if。判斷年齡是否介於6~11歲之間「a>=6 && a<=11」。 |
#8: | 將格式化數據顯示到標準輸出。輸出1個整數(%d)「590」。 |
#9: | 第三個邏輯判斷式 else if。判斷年齡是否介於12~17歲之間「a>=12 && a<=17」。 |
#10: | 將格式化數據顯示到標準輸出。輸出1個整數(%d)「790」。 |
#11: | 第四個邏輯判斷式 else if。判斷年齡是否介於18~59歲之間「a>=18 && a<=59」。 |
#12: | 將格式化數據顯示到標準輸出。輸出1個整數(%d)「890」。 |
#13: | 邏輯判斷式 else。 |
#14: | 將格式化數據顯示到標準輸出。輸出1個整數(%d)「399」。 |
#15: | 邏輯判斷 if 結束。 |
#16: | 主程式回傳整數「0」。 |
#17: | 主程式結束。 |
進階想法:
延續題目(13)的觀念,關係運算子為「真」時,輸出1;為「假」時,輸出0。運用此觀念,來處理數字的問題。
年齡 | 票價 | 與前一年齡票價差 |
---|---|---|
0 ~ 5 | 0 | 0 |
6 ~ 11 | 590 | 590 |
12 ~ 17 | 790 | 200 |
18 ~ 59 | 890 | 100 |
60 ~ | 399 | -491 |
程式碼:
#include <stdio.h> int main(void){ int a; scanf("%d",&a); printf("%d",(a>=0)*0 + (a>=6)*590 + (a>=12)*200 + (a>=18)*100 + (a>=60)*(-491) ); return 0; }程式碼解析:
#1: | 引入標準輸入/輸出串流。 |
#2: | 主程式開始,回傳引數int,沒有參數。 |
#3: | 宣告1個整數(int)變數「a」,範圍–2,147,483,648 到 2,147,483,647。 |
#4: | 從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「a」。 |
#5: | 將格式化數據顯示到標準輸出。輸出1個整數(%d)「(a>=0)*0 + (a>=6)*590 + (a>=12)*200 + (a>=18)*100 + (a>=60)*(-491)」。 |
#6: | 主程式回傳整數「0」。 |
#7: | 主程式結束。 |