C语言实现时针分针夹角计算

问题描述

普通时钟都有时针和分针。在任意时刻,时针和分针都有一个夹角,并且假设时针和分针都是连续移动的。现已知当前的时刻,试求出在该时刻时针和分针的夹角A(0≤A≤180)。

注意:当分针处于0分和59分之间时,时针相对于该小时的起始位置也有一个偏移角度。

输入形式

输入一个24小时制的时间。格式是以英文字符冒号(:)分隔的两个整数m(0≤m≤23)和n(0≤n≤59),其中m表示时,n表示分。

输出形式

输出一个浮点数A,是时针和分针夹角的角度值。该浮点数保留三位小数。

样例输入

8:10

样例输出

175.000

样例说明

钟表指针角度的计算

  1. 分针走过1小格用时1分钟,走过的度数是6°,时针走过一大格用时1h,走过的度数是30°;

  2. 时针的速度是分钟的1/12,因此分针每走一小格即一分钟,时针走1/12*6°=0.5°;

  3. 在计算角度的时候,可以从整点整分开始考虑,再进行角度的加减运算,从而求出钟表实际的角度值。

例如:

8点10,可以假设时针正好在8上,度数为830°=240°;而实际上,分针转动,时针也是转动的,根据分针每走一分钟,时针走0.5°,可得10分的时候,时针转动了100.5°=5°;分针在2上,角度为10*6°=60°。因此,角度为:240°+5°-60°=185°,根据题目要求,时针和分针的夹角A(0≤A≤180)。因此8点10分的夹角为360°-185°=175°。

代码实现

#include <stdio.h>

int main() {
    int hour, minute;
    scanf('%d:%d', &hour, &minute);

    float hour_angle = hour * 30 + minute * 0.5;
    float minute_angle = minute * 6;
    float angle = hour_angle - minute_angle;
    if (angle < 0) {
        angle = -angle;
    }
    if (angle > 180) {
        angle = 360 - angle;
    }
    printf('%.3f', angle);

    return 0;
}

说明:

  1. 首先通过scanf函数读取输入的时间,得到小时和分钟。
  2. 根据钟表指针的移动规律,计算时针和分针的角度,时针每小时走30度,每分钟走0.5度,分针每分钟走6度。
  3. 计算时针和分针的夹角并处理可能的负数和大于180度的情况。
  4. 使用printf函数输出计算得到的角度,并保留三位小数。
C语言实现时针分针夹角计算

原文地址: https://www.cveoy.top/t/topic/o7DX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录