请把从午夜0点起到中午12点(记为从00:00:00到12:00:00)时钟的时针、分针和秒针3针重合于同一位置的时刻计算出来。为实际编程方便,当3针中两两之间的夹角小于1°时即认为是重合了。

本文详细阐述了一个编程问题,如何通过算法计算从午夜到正午期间时钟秒针、分针和时针重合的精确时间点,包括代码实现和关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

请把从午夜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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Grausam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值