如果思路是計算三者重合的時間,那麼會讓謎題變得很復雜,具體數學分析也可以看下面網址。
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);
}
}