时间类问题 (主打心细)

🤠 Acwing 1231.航班时间
在这里插入图片描述
在这里插入图片描述

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

👨‍🏫 思路(小学奥数:流水行船)

🥞 全部时间转换为以秒为单位,方便计算
⭐ 去:到达时间1 - 出发时间 2- 时差 = 飞行时间1
⭐ 回:到达时间1 - 出发时间2 + 时差 = 飞行时间2
⭐ 飞行时间1 + 飞行时间2 = (到达1 - 出发1 )+ (到达2 - 出发2 ) -> 再 除个 2 就是飞行时间了

👨‍🏫 java 的字符串处理

⭐ charAt(index)
⭐ subString(起点,终点(删))
⭐ '数字' - '0' :char 类型数字转 int (一次只能转换一位数)
⭐ split("分隔符")

😋 易错点

	int h = time / 3600;
	int m = time % 3600 / 60;
	int s = time % 60;
import java.io.*;

public class Main
{
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

	public static void main(String[] args) throws IOException
	{
		int n = Integer.parseInt(in.readLine());
		while (n-- > 0)
		{
			int time = 0;
			for (int i = 0; i < 2; i++)
			{
				String line = in.readLine();
				int d = 0;
				int len = line.length();
				if (line.charAt(len - 1) == ')')
				{
					d = line.charAt(len - 2) - '0';// 注意:这里投机了,d 只能是一位数
					line = line.substring(0, len - 5);
				}

//			System.out.println(d);
//			System.out.println(line);

				String[] dates = line.split(" ");
				String date1 = dates[0];
				String date2 = dates[1];

				time += getTime(date1, date2, d);
			}
			time /= 2;
//			以下请全文背诵
			int h = time / 3600;
			int m = time % 3600 / 60;
			int s = time % 60;
//			
			System.out.printf("%02d:%02d:%02d\n", h, m, s);
		}
	}

	private static int getTime(String date1, String date2, int d)
	{

//		先把两个时间的 时分秒抠出来
		String[] arr = date1.split(":");
		int hour = Integer.parseInt(arr[0]);
		int minute = Integer.parseInt(arr[1]);
		int second = Integer.parseInt(arr[2]);
//		一去
		int s1 = getSecond(hour, minute, second);// 出发时间不会 +1 天

//		
		String[] arr1 = date2.split(":");
		hour = Integer.parseInt(arr1[0]);
		minute = Integer.parseInt(arr1[1]);
		second = Integer.parseInt(arr1[2]);
//		一回
		int s2 = getSecond(hour, minute, second);

		return s2 - s1 + d * 24 * 3600;
	}

	private static int getSecond(int hour, int minute, int second)
	{
//		System.out.println(d);
//		System.out.println(hour + " " + minute + " " + second + " " + d);
//		System.out.println();

//		return hour * 3600 + minute * 60 + second + d * 24 * 3600;
		return hour * 3600 + minute * 60 + second;
	}
}

posted @ 2023-03-17 17:52  兑生  阅读(16)  评论(0)    收藏  举报  来源
Live2D