直接計算三針重合時間數學推導複雜。轉換思路:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
struct HMS { int hour, minute, second; };
HMS secToHour(int s) {
int h = s / 3600; s %= 3600;
int m = s / 60; s %= 60;
return HMS{h, m, s};
}
void meetTime(vector<int> &mt) {
double vs = 1.0; // 秒針速度:1 圈/分鐘
double vm = 1.0 / 60.0; // 分針速度
double vh = 1.0 / 720.0; // 時針速度
for (int i = 1; i < 24; i++) {
int a = i * 60.0 / (vm - vh); // 時分針重合時間(秒)
if (fmod((vs - vh) * a, 60.0) <= 1) // 判斷秒針是否同位
mt.push_back(a);
}
}
程序將問題轉化為簡單的相對速度計算,避免複雜數學推導,輕松驗證三針重合謎題。