题目传送门:6768. Log Books
思路:
1. 这道题比较麻烦的是输入,时间的格式如12:04 ,这样后面再计算加减的时候会有问题,所以干脆转化成分钟,没一个时刻用该时刻是当天的第多少分钟表示,如12:04可以表示为第12 * 60 + 4 = 724
2. 对于n个驾驶时间的信息,每次都要判断是否超过2个小时,按照题目只要有一次超过2个小时就NON。
3. 累加总的驾驶时间以便最后判断是否达到50小时,还有每次要判断是否在夜间驾驶,累加总的夜间驾驶时间判断是否达到10小时。
代码:
1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 5 6 int main(){ 7 int n; 8 while(scanf("%d", &n) && n != 0){ 9 int start_time, finish_time, sunrise_time, sunset_time; 10 int hour, minute; 11 int driving_time_total = 0, night_driving_time_total = 0; 12 string result = "PASS"; 13 for (int i = 0; i < n; ++i) { 14 //read in times and convert to minutes 15 scanf("%d:%d", &hour, &minute); 16 sunrise_time = hour * 60 + minute; 17 scanf("%d:%d", &hour, &minute); 18 sunset_time = hour * 60 + minute; 19 scanf("%d:%d", &hour, &minute); 20 start_time = hour * 60 + minute; 21 scanf("%d:%d", &hour, &minute); 22 finish_time = hour * 60 + minute; 23 int driving_time = finish_time - start_time; 24 if(driving_time >= 120){ 25 result = "NON"; 26 continue; 27 } 28 driving_time_total += (finish_time - start_time); 29 //judge if drive at night 30 if(start_time < sunrise_time && driving_time <= 2 * (sunrise_time - start_time)) 31 night_driving_time_total += driving_time; 32 else if(finish_time > sunset_time && driving_time <= 2 * (finish_time - sunset_time)) 33 night_driving_time_total += driving_time; 34 } 35 if(driving_time_total < 50 * 60) 36 result = "NON"; 37 if(night_driving_time_total < 10 * 60) 38 result = "NON"; 39 cout << result << endl; 40 } 41 return 0; 42 }