当前位置: 首页 > article >正文

蓝桥杯每日真题 - 第15天

题目:(钟表)

题目描述(13届 C&C++ B组B题)

解题思路:

  1. 理解钟表指针的运动

    • 秒针每分钟转一圈,即每秒转6度。

    • 分针每小时转一圈,即每分钟转6度。

    • 时针每12小时转一圈,即每分钟转0.5度。

  2. 计算角度

    • 秒针的角度 S=6m(其中 m 是秒)。

    • 分针的角度 M=6f+0.1m(其中 f 是分)。

    • 时针的角度 H=30s+0.5f+0.0083m(其中 s 是小时)。

  3. 计算夹角

    • 分针和时针的夹角 A=∣H−M∣。

    • 分针和秒针的夹角 B=∣M−S∣。

  4. 条件判断

    • 需要满足 A=2B。

  5. 遍历时间

    • 从 s=0 到 s=6,ff 从 0 到 59,mm 从 0 到 59,检查每个时间点是否满足条件。

代码实现(C语言):

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int h = 0, m = 0, s = 0; // 时、分、秒
    double A, B, H, M, S;    // A、B 表示题目中的夹角,H、M、S 表示时针、分针、秒针的度数

    while (h < 6) // 时针只需遍历 0~6
    {
        s++; // 秒针每秒加一
        if (s == 60) // 秒针转一圈
        {
            s = 0;
            m++;
        }
        if (m == 60) // 分针转一圈
        {
            m = 0;
            h++;
        }

        // 计算秒针、分针、时针当前的位置(以度数为单位)
        S = s * 6.0;                           // 秒针每秒走6度
        M = (m + s / 60.0) * 6.0;              // 分针每分钟走6度,并加上秒针带来的细微变化
        H = (h + m / 60.0 + s / 3600.0) * 30.0; // 时针每小时走30度,并加上分针和秒针带来的变化

        // 计算时针与分针的夹角 A
        A = (H > M) ? (H - M) : (M - H);
        if (A > 180) A = 360 - A; // 确保 A 在 [0, 180] 范围内

        // 计算分针与秒针的夹角 B
        B = (S > M) ? (S - M) : (M - S);
        if (B > 180) B = 360 - B; // 确保 B 在 [0, 180] 范围内

        // 判断是否满足 A = 2B
        if (A == 2 * B)
        {
            // 找到答案后直接跳出循环
            break;
        }
    }

    // 输出时、分、秒
    printf("%d %d %d\n", h, m, s);
    return 0;
}

得到运行结果:

代码分析: 

变量说明

  • h, m, s:分别表示小时、分钟、秒的整数值。

  • H, M, S:分别表示时针、分针、秒针所指向的具体角度(度数)。

  • A, B:分别表示时针与分针的夹角、分针与秒针的夹角。

角度计算

  • 秒针的角度[ S = s \times 6.0 ]。秒针每秒钟走 6 度。

  • 分针的角度[ M = (m + \frac{s}{60.0}) \times 6.0 ]。分针每分钟走 6 度,且秒针的细微变化会影响分针的位置。

  • 时针的角度[ H = (h + \frac{m}{60.0} + \frac{s}{3600.0}) \times 30.0 ]。时针每小时走 30 度,同时分针和秒针也会微调时针的位置。

夹角计算

  • 两个指针的夹角:是大角减小角,如果夹角大于 180 度,取补角。

  • 时针与分针夹角 A
    [ A = (H > M) ? (H - M) : (M - H); ]
    [ \text{if } A > 180 \text{ then } A = 360 - A; ]

  • 分针与秒针夹角 B
    [ B = (S > M) ? (S - M) : (M - S); ]
    [ \text{if } B > 180 \text{ then } B = 360 - B; ]

判断条件

  • 只需判断是否满足 ( A = 2B )。

循环终止

  • 当找到符合条件的时、分、秒时,用 break 终止循环,输出结果即可。

难度分析

⭐️⭐️⭐️

总结

这段代码通过模拟时钟的运行,计算出在一天中的某个时刻,时针和分针的夹角是分针和秒针夹角的两倍。这个问题考察了对时间的理解和指针运动的计算,以及如何将这些计算转化为代码实现。


http://www.kler.cn/a/397891.html

相关文章:

  • IDEA leetcode插件代码模板配置,登录闪退解决
  • spring-cache concurrentHashMap 自定义过期时间
  • 【Oracle篇】掌握SQL Tuning Advisor优化工具:从工具使用到SQL优化的全方位指南(第六篇,总共七篇)
  • 联通大数据面试题及参考答案
  • leetcode面试 150题之 三数之和 复刷日记
  • MySQL初学之旅(3)约束
  • 24下软考高级【系统架构设计师】考试难度分析
  • Python学习27天
  • OpenGL ES 文字渲染进阶--渲染中文字体
  • NOIP2007T1 统计数字
  • Android 配置默认输入法
  • Scala中的迭代器
  • 如何找出爬取网站的来源IP呢?
  • 对接阿里云实人认证
  • UG Motion学习笔记
  • 【AI图像生成网站Golang】JWT认证与令牌桶算法
  • 在 Linux 系统上部署 Oracle 数据库涉及多个步骤
  • AI技术如何助力电商平台提升销售效率与用户体验?——创新应用、挑战与未来发展趋势
  • 【代码随想录回溯算法|子集问题】
  • 排序算法(基础)大全
  • 网络工程实验四:NAT的配置
  • 【MongoDB】MongoDB的核心-索引原理及索引优化、及查询聚合优化实战案例(超详细)
  • 【基于轻量型架构的WEB开发】课程 13.2.4 拦截器 Java EE企业级应用开发教程 Spring+SpringMVC+MyBatis
  • 机器学习:XGBoost模型(升级版)——高效且强大的树形模型
  • 安全见闻4
  • 《C语言程序设计现代方法》note-5 数组