Giới thiệu
Cho giờ (h) và phút (m), tìm góc nhỏ hơn giữa kim giờ và kim phút trên đồng hồ analog.
Công thức
- Kim giờ: 0.5° mỗi phút →
hour_angle = 0.5 * (60*h + m) - Kim phút: 6° mỗi phút →
minute_angle = 6 * m - Chênh lệch:
diff = |hour_angle - minute_angle| - Kết quả:
min(diff, 360 - diff)
Ví dụ
h = 12, m = 45 → hour_angle = 0.5*(0+45) = 22.5°, minute_angle = 270° → diff = 247.5° → min = 112.5°
Ví dụ triển khai (C++)
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
double findAngle(int h, int m) {
if (h == 12) h = 0;
if (m == 60) m = 0;
double hourAngle = 0.5 * (60 * h + m);
double minuteAngle = 6 * m;
double diff = abs(hourAngle - minuteAngle);
return min(diff, 360 - diff);
}
};
int main() {
Solution ob;
cout << fixed << setprecision(1) << ob.findAngle(12, 45); // 112.5
return 0;
}
Đầu vào
12, 45
Đầu ra
112.5