d095 - 00579 - ClockHands
題目描述
題目要求計算時鐘上時針和分針之間的最小角度。輸入為一系列的時間,格式為 H:M,其中 H 為小時 (1-12),M 為分鐘 (00-59)。輸入結束條件為 0:00。輸出為時針和分針之間的最小正角度,精確到小數點後三位。
解題思路
解題思路是根據給定的時間計算時針和分針的度數,然後計算它們之間的差的絕對值。由於題目要求最小正角度,因此需要考慮兩種情況:如果差值大於 180 度,則用 360 度減去差值;否則,直接使用差值。時針每小時移動 30 度 (360/12),分針每分鐘移動 6 度 (360/60)。時針的度數還需要加上分針移動所帶來的影響,即 m/12。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入的時間數量。
- 空間複雜度: O(1),因為只使用了常數級別的額外空間。
程式碼
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
string a;
double h,m;
cout << fixed << setprecision(3);
while(cin >> a){
if(a[0]=='0')
break;
else if(a.length()==4){
h=a[0]-48;
m=(a[2]-48)*10+a[3]-48;
}
else{
h=(a[0]-48)*10+a[1]-48;
m=(a[3]-48)*10+a[4]-48;
}
m*=6;
h=h*30+m/12;
if(m>h){
if(m-h>180)
cout << 360-(m-h) << endl;
else
cout << m-h << endl;
}
else{
if(h-m>180)
cout << 360-(h-m) << endl;
else
cout << h-m << endl;
}
}
}