f706 - 時區 (Zone)
題目描述
題目給定兩個時間點,要求計算它們之間的時間差,並將時間差轉換為一個新的時間表示形式。具體來說,輸入包含兩個時間,分別是起始時間和結束時間,格式為 時:分:秒。程式需要計算從起始時間到結束時間經過了多少分鐘,然後將這個分鐘數轉換為 時:分:秒 的格式,並輸出結果。需要注意的是,時間差可能跨越一天或多天,因此需要進行適當的調整。
解題思路
這題主要考驗對時間運算和轉換的理解。程式首先將兩個時間點轉換為分鐘數,然後計算分鐘數的差值。由於時間差可能為負數,因此需要進行調整,使其為正數。最後,將分鐘數差值轉換回 時:分:秒 的格式,並輸出結果。程式中使用了整數除法和取模運算來進行時間的轉換和調整。由於時區的循環特性,需要對小時數進行模 36 運算,以確保結果在 0 到 35 的範圍內。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(1)
程式碼
#include <iostream>
using namespace std;
int main(){
int a,b,c,d;
cin >> a >> b >> c >> d;
b+=a*60+(d*90);
a=0;
while(b<0){
--a;
b+=60;
}
a+=b/60;
b%=60;
while(a<0){
a+=36;
}
cout << a%36 << ":" << b/10 << b%10 << ":" << c/10 << c%10 ;
}