题目描述
请把从午夜0点起到中午12点(记为从00:00:00到12:00:00)时钟的时针、分针和秒针3针重合于同一位置的时刻计算出来。为实际编程方便,当3针中两两之间的夹角小于1°时即认为是重合了。
思路
首先显然00:00:00和12:00:00时三针重合。
秒针的角速度是6度/秒;
分针的角速度是6度/分;
时针的角速度是0.5度/分。
我们不妨以1秒为一个单位计算,
然后我们可以分别求出三根针到0位置的夹角(顺时针)。
从00:00:00到12:00:00一共有12×60×60=43200秒。
然后一秒一秒枚举。
最后输出的时候把second转化成XX:XX:XX这样的格式。
源码
#include<iostream>
using namespace std;
void changeTheSecond(int n) {
int hour = n / 3600;
int minute = (n / 60) % 60;
int second = n % 60;
cout.fill('0');//设置填充字符
cout.width(2);//设置域宽
cout << hour << ":" << minute << ":" << second << endl;
}
int main() {
for (int SECOND = 0; SECOND < 43201; SECOND++) {
double secondDOT = (SECOND * 6) % 360;
int t = (int)(SECOND * 0.1 / 360);
double minuteDOT = SECOND * 0.1 - 360 * t;
int p = (int)((SECOND * 0.5 / 60) / 360);
double hourDOT = SECOND * 0.5 / 60 - 360 * p;
if ((fabs(secondDOT - minuteDOT) < 1) && (fabs(hourDOT - minuteDOT) < 1) && (fabs(hourDOT - secondDOT) < 1))
changeTheSecond(SECOND);
}
return 0;
}
输出样例
00:00:00
12:00:00