C语言实现时针分针夹角计算
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分钟,走过的度数是6°,时针走过一大格用时1h,走过的度数是30°;
-
时针的速度是分钟的1/12,因此分针每走一小格即一分钟,时针走1/12*6°=0.5°;
-
在计算角度的时候,可以从整点整分开始考虑,再进行角度的加减运算,从而求出钟表实际的角度值。
例如:
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;
}
说明:
- 首先通过
scanf函数读取输入的时间,得到小时和分钟。 - 根据钟表指针的移动规律,计算时针和分针的角度,时针每小时走30度,每分钟走0.5度,分针每分钟走6度。
- 计算时针和分针的夹角并处理可能的负数和大于180度的情况。
- 使用
printf函数输出计算得到的角度,并保留三位小数。
原文地址: https://www.cveoy.top/t/topic/o7DX 著作权归作者所有。请勿转载和采集!