蓝桥杯每日真题 - 第15天

devtools/2024/11/18 22:23:49/

题目:(钟表)

题目描述(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度,并加上分针和秒针带来的变化// 计算时针与分针的夹角 AA = (H > M) ? (H - M) : (M - H);if (A > 180) A = 360 - A; // 确保 A 在 [0, 180] 范围内// 计算分针与秒针的夹角 BB = (S > M) ? (S - M) : (M - S);if (B > 180) B = 360 - B; // 确保 B 在 [0, 180] 范围内// 判断是否满足 A = 2Bif (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.ppmy.cn/devtools/135048.html

相关文章

c++数字雨实现

‌数字雨‌是一种视觉效果&#xff0c;通常出现在黑客电影中&#xff0c;表现为屏幕上不断下落的数字和字符&#xff0c;营造出一种科技感和动态效果。‌12 数字雨的实现方法 ‌编程实现‌&#xff1a;可以使用C/C编程语言来实现数字雨效果。通过定义一个字符串数组&#xff0…

刘铁猛C#入门 024 类的声明,继承和访问控制

类声明的全貌 C#声明类的位置 声明既定义(C#与Java) 类的修饰符 最简单的类声明 类的访间控制 &#xff1a;默认internal 共性 public 和 internal 都是访问修饰符&#xff0c;用于定义一个类型的成员可以被谁访问。它们都可以用来声明类、结构、接口、枚举、字段、方法、…

Docker环境搭建Cloudreve网盘服务(附shell脚本一键搭建)

Docker搭建Cloudreve Cloudreve介绍&#xff1a; Cloudreve 是一个基于 ThinkPHP 框架构建的开源网盘系统&#xff0c;旨在帮助用户以较低的成本快速搭建起既能满足个人也能满足企业需求的网盘服务。Cloudreve 支持多种存储介质&#xff0c;包括但不限于本地存储、阿里云OSS、…

第8章 利用CSS制作导航菜单

8.1 水平顶部导航栏 水平莱单导航栏是网站设计中应用范围最广的导航设计&#xff0c;一般放置在页面的顶部。水平 导航适用性强&#xff0c;几乎所有类型的网站都可以使用&#xff0c;设计难度较低。 如果导航过于普通&#xff0c;无法容纳复杂的信息结构&#xff0c;就需要在…

Neo4j Desktop 和 Neo4j Community Edition 区别

Neo4j Desktop 和 Neo4j Community Edition 的主要区别在于它们的用途、功能以及安装和管理方式。以下是这两者的详细对比&#xff1a; 1. Neo4j Desktop Neo4j Desktop 是一个图形化的桌面应用程序&#xff0c;主要为开发人员和个人使用提供了一个便捷的环境来安装、管理和运…

Python 正则表达式使用指南

Python 正则表达式使用指南 正则表达式&#xff08;Regular Expression, 简称 regex&#xff09;是处理字符串和文本的强大工具。它使用特定的语法定义一组规则&#xff0c;通过这些规则可以对文本进行匹配、查找、替换等操作。Python 提供了 re 模块&#xff0c;使得正则表达…

vim教程

Vim是一款功能强大的文本编辑器&#xff0c;广泛应用于Linux系统。它不仅是一个编辑器&#xff0c;更是一个开发者必备的工具。下面将详细介绍Vim的基本操作、高级功能、插件管理和配置&#xff1a; Vim的安装 在Ubuntu/Debian上安装&#xff1a;sudo apt update sudo apt inst…

小程序-基于java+SpringBoot+Vue的驾校预约平台设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…