Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm thời điểm mà góc giữa kim giờ và kim phút bằng theta cho trước trong C++

Giả sử chúng ta có một giá trị góc theta. Chúng ta cần tìm một thời điểm ở định dạng hh:mm sao cho góc giữa kim giờ và kim phút bằng theta đó. Ví dụ, nếu góc là 90°, kết quả có thể là 3:00.

Vì có 12 giờ, nên có 12 khả năng cho giờ và 60 khả năng cho phút. Ta sẽ duyệt qua tất cả các thời điểm có thể. Nếu góc tại thời điểm nào đó bằng theta cho trước, in ra thời điểm đó.

Ví dụ

#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);
}

Kết quả

4:30