d060: 還要等多久啊?(5)
更新時間:2016/12/20
內容:文文又想打電話給珊珊,可是這次他碰到了另一個問題。珊珊說他們學校每堂課 50 分鐘,下課的時間都是整點過後 25 分,休息 10 鐘後再上下一節課。文文不想打擾珊珊上課,也不想才剛打通電話她就要上課去了,因此他決定一定要在剛好 25 分的時候打電話給她。給你現在時間的分,請你幫他算算看還要等多久才能打電話給珊珊?
輸入說明:
輸入只有一行,包含現在時間的分 m (0 ≤ m ≤ 59)。
輸出說明:
輸出還要等幾分鐘文文才能打電話。
範例輸入:
20
範例輸出:
5
提示:
背景知識:
算術運算子
你能只用算術運算子來求出解答,而不需要用到 if 指令嗎?
想一想,再看解答~
我的解題想法:
以25分為基準,直接扣掉現在時間的分 m 。
會產生三種情況:
(A)如果現在時間等於25分,結果為0,不必等待就可以打電話。
(B)如果現在時間小於25分,結果為正數(1~25),就是等待時間。
(C)如果現在時間大於25分,結果為負數(-34~-1),就必須等待下一小時的25分。也就是說,從這一小時的25分到下一小時的25分,時間已經流逝的分鐘數。例如現在時間為40分,25-40=-15,到下一小時的60分鐘內,已經流逝15分鐘,也就是說再等45分鐘就是下一小時的25分。如果你只想到這邊,肯定要用到判斷式才能解決此問題。
再多想一點...
我們把這三種情況位移60(結果+60),此時三種情況分別為:
(A) 0 +60 = 60
(B)(1~25) +60 =(61~75)
(C)(-34~-1) +60 =(26~59)最後除以60取其餘數:
(A) 60 % 60 = 0
(B)(61~75) % 60 = (1~25)
(C)(26~59) % 60 = (26~59)經過基準點、位移與同餘的步驟後,結果就是文文必須等待的時間。
程式碼:
#include <stdio.h> int main(void){ int m; scanf("%d",&m); printf("%d",(25-m+60)%60); return 0; }程式碼解析:
#1: | 引入標準輸入/輸出串流。 |
#2: | 主程式開始,回傳引數int,沒有參數。 |
#3: | 宣告一個整數(int)變數「m」,範圍–2,147,483,648 到 2,147,483,647。 |
#4: | 從標準輸入讀取格式化數據。讀取1個整數(%d),指定值給「m」。 |
#5: | 將格式化數據顯示到標準輸出。輸出1個整數(%d)「(25-m+60)%60」。 |
#6: | 主程式回傳整數「0」。 |
#7: | 主程式結束。 |