思想:
从00:00:00到12:00:00,共有12×60×60=43200秒。一秒一秒枚举寻找符合条件的时间
最后输出的时候把second转化为XX:XX:XX的格式
需要考虑的问题:
1.如何将对时间的比较转化为对度数的比较
(1)计算秒针的角度(每秒钟转动6°)
(second * 6) % 360
(2)计算分针的角度(每秒钟转动0.1度)
①先计算分针转了多少圈
(second * 0.1) / 360
②再计算分针转动的角度
2.如何将最终符合条件的时间转化为XX:XX:XX的格式
#include<iostream>
#include <cmath>
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; // 计算秒针的角度,每秒钟转动6度
int t = (int)(SECOND * 0.1 / 360); // 计算分针的圈数
double minuteDOT = SECOND * 0.1 - 360 * t; // 计算分针的角度,每秒钟转动0.1度
int p = (int)((SECOND * 0.5 / 60) / 360); // 计算时针的圈数
double hourDOT = SECOND * 0.5 / 60 - 360 * p; // 计算时针的角度,每分钟转动0.5度
// 判断时针、分针、秒针的角度是否相等(误差不超过1度)
if ((fabs(secondDOT - minuteDOT) < 1) && (fabs(hourDOT - minuteDOT) < 1) && (fabs(hourDOT - secondDOT) < 1))
changeTheSecond(SECOND); // 转换并输出时分秒的格式
}
return 0;
}
后面回来填坑