题目描述
小h前往美国参加了蓝桥杯国际赛。
小h的女朋友发现小h上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。
小h对超音速飞行感到十分恐惧。
仔细观察后发现飞机的起降时间都是当地时间。
由于北京和美国东部有12小时时差,故飞机总共需要14小时的飞行时间。
不久后小h的女朋友去中东交换。
小h并不知道中东与北京的时差。
但是小h得到了女朋友来回航班的起降时间。
小h想知道女朋友的航班飞行时间是多少。
对于一个可能跨时区的航班,给定来回程的起降时间。
假设飞机来回飞行时间相同,求飞机的飞行时间。
输入样例
3
17:48:19 21:57:24
11:05:18 15:14:23
17:21:07 00:31:46 (+1)
23:02:41 16:13:20 (+1)
10:19:19 20:41:24
22:19:04 16:41:09 (+1)
输出样例
04:09:05
12:10:39
14:22:05
包装类实现
Java 代码
/*
去 起飞时间 (起飞时间+飞行时间+时差)%24
回 起飞时间 (起飞时间+飞行时间-时差)%24
*/
import java.io.BufferedInputStream;
import java.util.Scanner;
import java.time.LocalTime;
import java.time.Duration;
import java.time.format.DateTimeFormatter;
class Main{
static final int daySeconds = 24*3600;
public static void main(String[] args){
Scanner sc = new Scanner(new BufferedInputStream(System.in));
int n=Integer.parseInt(sc.nextLine());
while(n-->0){
String[] t = sc.nextLine().split(" "),
b = sc.nextLine().split(" ");
LocalTime ts = LocalTime.parse(t[0]), te = LocalTime.parse(t[1]),
bs = LocalTime.parse(b[0]), be = LocalTime.parse(b[1]);
// 算时间差
Duration tt=Duration.between(ts, te),
bb=Duration.between(bs, be);
// 装换成秒
long ttt=tt.getSeconds(),
bbb=bb.getSeconds();
// 加上天数
if(t.length==3){
if(t[2].equals("(+1)")) ttt+=daySeconds;
else ttt+=daySeconds*2;
}
if(b.length==3){
if(b[2].equals("(+1)")) bbb+=daySeconds;
else bbb+=daySeconds*2;
}
// 算持续时间
int lasting = (int)(ttt+bbb)/2%daySeconds;
int hour=lasting/3600, minute=lasting%3600/60, second=lasting%60;
// 输出格式
DateTimeFormatter f = DateTimeFormatter.ofPattern("HH:mm:ss");
System.out.println(LocalTime.of(hour, minute, second).format(f));
}
sc.close();
}
}