Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Angle Between Hands of a Clock ใน C++ : คำนวณมุมระหว่างเข็มนาทีและเข็มชั่วโมง


ให้ hour (1-12) และ minutes (0-59) หา **มุมเล็กที่สุด** (≤ 180°) ระหว่างเข็มนาทีและเข็มชั่วโมง

ตัวอย่าง

hour=12, minutes=30

  • Minute Hand: 30 * 6° = 180° (จาก 12)
  • Hour Hand: (0 * 30°) + (30 * 0.5°) = 15° (ชั่วโมง 12 = 0, เคลื่อน 0.5°/นาที)
  • Diff = |180 - 15| = 165° -> Min(165, 360-165) = 165°

สูตรคำนวณ

  • minuteAngle = minutes * 6 (360°/60 = 6° ต่อนาที)
  • hourAngle = (hour % 12) * 30 + minutes * 0.5 (30°/ชั่วโมง + 0.5°/นาที)
  • diff = abs(hourAngle - minuteAngle)
  • result = min(diff, 360 - diff)

ตัวอย่างโค้ด C++

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    double angleClock(int hour, int minutes) {
        if (hour == 12) hour = 0;
        if (minutes == 60) minutes = 0; // Edge case

        double hourAngle = 0.5 * (hour * 60 + minutes); // Degrees from 12
        double minuteAngle = 6.0 * minutes;
        double diff = abs(hourAngle - minuteAngle);
        return min(diff, 360.0 - diff);
    }
};

Input / Output

Input:  12 30
Output: 165.00000

ความซับซ้อน (Complexity)

  • Time: O(1)
  • Space: O(1)

จุดสำคัญ

  • Hour Hand เคลื่อนที่ **ต่อเนื่อง** (0.5° ต่อนาที) ไม่ใช่กระโดดทีละชั่วโมง
  • Normalize Hour: 12 -> 0
  • Return Smaller Angle (≤ 180°)

Math Problem แบบตรงไปตรงมา ครับ