有一环形公交站,包含N(N>=3)个站点{站点序号为:1~N},每个站点停留5分钟,相邻两个站点之间行驶时间都是10分钟,循环形式,已知第一圈第一个站点进入时间为X,现在公交形式时间为Y,请计算当前公交圈数,以及处在哪个站点之间M-N(如果停在某个站点Z,则输出Z-Z)
输入:
一行字符串:3,2017-07-25 06:00:00,2017-07-25 06:40:00【整数、时间字符串、时间字符串】时间精确到分钟,分别表示站点数,第一圈第一个站点的进入时间、目前时间;数据之间使用逗号分隔;要求至少三个站点。如输入条件不满足,则输出“incorrect data”
输出:
1;1-2
数据表示:公交正在行驶第一圈,在第一个和第二个站点之间;圈数与行驶站点之间使用分号分隔。
如果是1;2-2,则表示公交正在行驶第一圈,停留在第二个站点。
样例输入:
3,2017-07-25 06:00:00,2017-07-25 06:40:00
3,2017-07-25 06:00:00,2017-07-25 08:45:00
1,2017-07-25 06:00:00,2017-07-25 06:40:00
3,2017-07-25 06:00:66,2017-07-25 06:40:99
样例输出:
1;3-1
4;3-3
incorrect data
1;3-1
代码如下:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class BusTime {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String[] ss = s.nextLine().split(",");
// String[] ss = "3,2017-07-25 06:00:00,2017-07-25 06:40:00".split(",");
int n = Integer.valueOf(ss[0]);
Date date_start=null;
Date date_end=null;
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date_start = format.parse(ss[1]);
date_end = format.parse(ss[2]);
} catch (ParseException e) {
e.printStackTrace();
}
long min = (date_end.getTime()-date_start.getTime())/(1000*60); //得到间隔的分钟数
if(n<3 || min<0){
System.out.println("incorrect data");
return;
}
long q_Num = min / (15 * n); //圈数
long le_min = min % (15 * n); //q_Num圈之后剩余的分钟数
// System.out.println(le_min);
long a = le_min / 15; //剩余多少分钟所走的战术
long b = le_min % 15; //经过最后一个站点之后的剩余
// System.out.println(a +"***"+b);
System.out.print((q_Num+1)+";");
if(b>=0 && b<=5){
System.out.println((a%n+1)+"-"+(a%n+1));
}else{
System.out.println((a%n+1)+"-"+(a%n+2)%n);
}
}
}
通过90%,不知道是不是秒级单位的影响,但是最后一个样例有66s和99s。但是仍然正确,不知道是什么原因,望大神指点