先上题
样例输入
3 201711170032 201711222352
0 7 * * 1,3-5 get_up
30 23 * * Sat,Sun go_to_bed
15 12,18 * * * have_dinner
样例输出
201711170700 get_up
201711171215 have_dinner
201711171815 have_dinner
201711181215 have_dinner
201711181815 have_dinner
201711182330 go_to_bed
201711191215 have_dinner
201711191815 have_dinner
201711192330 go_to_bed
201711200700 get_up
201711201215 have_dinner
201711201815 have_dinner
201711211215 have_dinner
201711211815 have_dinner
201711220700 get_up
201711221215 have_dinner
201711221815 have_dinner
本人是用JAVA代码写的:
有两种思路:
第一种思路是根据配置文件计算出所有时间内的命令,并排序,然后输出。
第二种思路是根据开始时间计算,然后计算每一分钟,并进行对配置文件进行比较,合适的就输出,这个不用排序,知道达到结束时间,相对于第一种来说逻辑简单,但是时间复杂度高,因此才得了80分。
我采用的是第二种,这里简要说一下下面代码的思路:
1.用配置文件进行和当前时间比较
2.当前时间加1
3.当前时间是否结束
其中会用到计算星期:我这里用的是泰勒公式来计算星期:w=(y+[y/4]+[c/4]-2c+26(m+1)/10+d-1)mod 7
w:星期(0为星期天 1-6为星期一-六)
m:月份(3-14 1、2月份看为上一年的13、14月,所以此时就需要年份-1)
y:世纪-1
c:年的后两位
代码:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/*
* 运行