โจทย์
ให้มุม Theta (องศา) ต้องการหาเวลาแบบ hh:mm ที่เข็มนาทีและเข็มชั่วโมงสร้างมุมเท่ากับ Theta
ตัวอย่าง: Theta = 90° → เวลา 3:00
วิธีแก้ปัญหา (Brute Force)
ลูปทุกเวลาเป็นไปได้ (12 ชั่วโมง x 60 นาที = 720 กรณี):
- คำนวณมุมเข็มชั่วโมง: 0.5 * (hour*60 + minute)
- คำนวณมุมเข็มนาที: 6 * minute
- มุมระหว่างเข็ม = min(|hour_angle - minute_angle|, 360 - |...|)
- ถ้าเท่ากับ Theta → พิมพ์เวลาและจบ
ตัวอย่างโค้ด C++
#include <iostream>
#include <cmath>
using namespace std;
float angleFromClockHand(int hour, int minute) {
float hour_angle = 0.5 * (hour * 60 + minute);
float minute_angle = 6 * minute;
float angle = abs(hour_angle - minute_angle);
angle = min(360 - angle, angle);
return angle;
}
void findTime(float theta) {
for (int hour = 0; hour < 12; hour++) {
for (int min = 0; min < 60; min++) {
if (angleFromClockHand(hour, min) == theta) {
cout << hour << ":" << min;
return;
}
}
}
cout << "Unable to find time";
}
int main() {
float angle = 45.0;
findTime(angle);
}
ผลลัพธ์
4:30