Bài 35.4. Lớp Thời gian và Phép toán Khoảng thời gian - [Độ khó: Khá]
Bài 35.4. Lớp Thời gian và Phép toán Khoảng thời gian - [Độ khó: Khá]
Mô tả bài tập:
Trong nhiều ứng dụng thực tế, chúng ta thường xuyên cần thao tác với các khoảng thời gian, chẳng hạn như tính tổng thời gian làm việc trong một dự án hoặc hiệu số giữa hai mốc thời gian để xác định độ trễ. Bạn được yêu cầu thiết kế một lớp Time
để đại diện cho một khoảng thời gian (bao gồm giờ, phút, giây) và hỗ trợ các phép toán cơ bản như cộng và trừ giữa các khoảng thời gian này. Điều quan trọng là các phép toán này phải trả về một đối tượng Time
mới đã được chuẩn hóa (ví dụ: 70 giây phải được chuyển thành 1 phút 10 giây; 80 phút phải chuyển thành 1 giờ 20 phút). Việc triển khai các toán tử (+
, -
) sẽ giúp mã nguồn của bạn trở nên tự nhiên và dễ đọc hơn, giống như cách chúng ta cộng trừ các số nguyên thông thường.
INPUT FORMAT:
Dòng đầu tiên chứa một số nguyên N
(1 <= N
<= 100), là số lượng phép toán cần thực hiện.
N
dòng tiếp theo, mỗi dòng mô tả một phép toán:
H1 M1 S1 [Loai_toan_tu] H2 M2 S2
H1, M1, S1
: Các số nguyên biểu thị giờ, phút, giây của khoảng thời gian thứ nhất (0 <=H1
<= 1000, 0 <=M1
,S1
<= 59).Loai_toan_tu
: Một ký tự '+' hoặc '-'.H2, M2, S2
: Các số nguyên biểu thị giờ, phút, giây của khoảng thời gian thứ hai (0 <=H2
<= 1000, 0 <=M2
,S2
<= 59).
OUTPUT FORMAT:
Đối với mỗi phép toán, in ra một dòng duy nhất theo định dạng:
[Ket_qua_gio]h [Ket_qua_phut]m [Ket_qua_giay]s
Ket_qua_gio
,Ket_qua_phut
,Ket_qua_giay
: Các giá trị đã được chuẩn hóa.- Kết quả của phép trừ không bao giờ là số âm; nếu khoảng thời gian thứ nhất nhỏ hơn khoảng thời gian thứ hai, coi kết quả là 0h 0m 0s.
Ví dụ: Input:
3
1 30 0 + 0 45 30
2 0 15 - 1 5 0
0 10 0 - 0 15 0
Output:
2h 15m 30s
0h 55m 15s
0h 0m 0s
Giải thích:
- Phép toán 1: Cộng (1h 30m 0s) + (0h 45m 30s)
- Tổng giây: 0 + 30 = 30s
- Tổng phút: 30 + 45 = 75m. Chuẩn hóa: 75m = 1h 15m.
- Tổng giờ: 1 + 0 + (1h từ phút) = 2h.
- Kết quả: 2h 15m 30s.
- Phép toán 2: Trừ (2h 0m 15s) - (1h 5m 0s)
- Chuyển về tổng số giây để dễ tính toán:
- 2h 0m 15s = 2 3600 + 0 60 + 15 = 7215 giây.
- 1h 5m 0s = 1 3600 + 5 60 + 0 = 3900 giây.
- Hiệu số giây = 7215 - 3900 = 3315 giây.
- Chuyển 3315 giây về định dạng giờ, phút, giây:
- 3315 / 3600 = 0 giờ (dư 3315 giây)
- 3315 / 60 = 55 phút (dư 15 giây)
- 15 giây
- Kết quả: 0h 55m 15s.
- Chuyển về tổng số giây để dễ tính toán:
- Phép toán 3: Trừ (0h 10m 0s) - (0h 15m 0s)
- Khoảng thời gian thứ nhất (10 phút) nhỏ hơn khoảng thời gian thứ hai (15 phút).
- Theo quy định của bài toán, kết quả là 0h 0m 0s.
Comments