如果思路是計算三者重合的時間,那麼會讓謎題變得很復雜,具體數學分析也可以看下面網址。
http://www.planetseed.com/node/18560
但是這裡使用簡單一點的思路,思路一變,那麼程序就可以寫的很簡單了,如下:
思路:
1 先解決時針和分針重合問題,如我前面一篇博客,可以看到12小時之內重合12次(算上頭尾兩次)。
2 然後問題就轉換成為在這個12次相遇的時間中,有沒有一次在這一個時間中使得分針和秒針重合(或者是時針和秒針重合)?
使用這一思路我們就可以得到如下C++程序:
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <map> #include <math.h> using namespace std; struct HMS { int hour; int minute; int second; HMS(int h=0, int m=0, int s=0) : hour(h), minute(m), second(s){} }; 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; double vm = 1.0 / 60.0; double vh = 1.0 / 60.0 / 12; 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); } }