| 时钟夹角 |
| 题目描述 |
| fire现在没有事情做,只能看着时钟发呆,出于对数据的渴望, |
| |
| 突然他想知道这个表的时针和分针的夹角是多少? |
| |
| 现在fire知道的只有时间,请你帮他算出这个夹角。 |
| |
| 注:夹角的范围[0,180],时针和分针的转动是连续而不是离散的。 |
| 输入 |
| 输入数据的第一-行是一-个数据T,表示有T组数据。每组数据有三个整数 h(0<= h<24),m(0<= m< 60), |
| s(0<=s< 60)分别表示时、分、秒。 |
| 输出 |
| 对于每组输入数据,输出夹角的大小的 整数部分。 |
| 样例输入 |
| 2 |
| 8 3 17 |
| 5 13 30 |
| |
| 样例输出 |
| 138 |
| 75 |
| |
| !分析: |
| 思路:将当前时刻单位统一为分钟(小时数部分可不考虑);再将当前时刻统一单位为小时(分钟和秒钟都化作小时为单位); |
| |
| 事实上,其实如果肉眼足够强大的化,分针和秒针是不必要看的 |
| (时针是能够反赢分钟和秒针的位置的,时针外的两个指针是为了弥补肉眼的不足) |
| 同样的对于分针来讲,秒针也只是帮助人眼观察,(分钟本身是可以反映秒针的位置呢) |
| |
| 我们不妨先考虑秒针为零的基准状况: |
| 另外, |
| 写个函数, |
| 秒针相对于12/0点刻度的偏转量; |
| |
| |
| 写个函数计算分针对12/0点的偏转角度 |
| 最后求时针对12点的偏转量. |
| 再将后两者做差. |
| |
| 秒针转动一格:即秒针偏转6°(时间推进了一秒钟,== 1/60分钟 == 1/3600小时) |
| 那么这时候,分针将偏转:6°*(1/60); |
| 时针将偏转6°*(1/3600); |
| |
| 分钟转动一格,时钟偏转6°*(1/60) |
| (总之,上一级的偏转量要基于(且仅基于)下一级别指针的偏转量) |
| |
| 基于上,可以算出 |
| */ |
| |
| #include <stdio.h> |
| #include <string.h> |
| #include <math.h> |
| #include <stdlib.h> |
| #define ANGLE_PER_MINUTE 6 |
| #define ANGLE_PER_HOUR 30 |
| |
| |
| |
| |
| |
| float minute_hand_angle(int minute,int second) |
| { |
| float minute_offset = 0; |
| minute_offset += ANGLE_PER_MINUTE * ( minute + second / 60.0); |
| return minute_offset; |
| } |
| |
| float hour_hand_angle(int hour,int minute,int second) |
| { |
| float hour_offset = 0; |
| |
| hour_offset += ANGLE_PER_HOUR * ( hour + (minute + second / 60.0 ) / 60.0 ); |
| return hour_offset; |
| } |
| |
| int main() |
| { |
| |
| int n; |
| struct time{ |
| int hour; |
| int minute; |
| int second; |
| }time_in_day; |
| struct time *p; |
| p = &time_in_day; |
| while (scanf("%d", &n) != EOF) |
| { |
| for(int i = 0;i<n;i++) |
| { |
| scanf("%d %d %d", &(p->hour), &(p->minute), &(p->second)); |
| if(p->hour >= 12) p->hour -= 12; |
| |
| |
| float angle_minute = 0, angle_hour = 0; |
| angle_minute = minute_hand_angle((p->minute), (p->second)) angle_hour = hour_hand_angle( p->hour, p->minute,p->second); |
| |
| |
| |
| |
| float result = fabs(angle_minute - angle_hour); |
| |
| if (result <= 180 && result > 0.4) |
| { |
| printf("%.0f\n", result - 0.5); |
| } |
| else if (result <= 0.4) |
| { |
| printf("%.0f\n", result ); |
| } |
| |
| else |
| { |
| printf("%.0f\n", 360 - result - 0.5); |
| } |
| } |
| } |
| |
| return 0; |
| } |
版本2:
| #define _CRT_SECURE_NO_WARNINGS |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #include <stdio.h> |
| #include <string.h> |
| #include <math.h> |
| #include <stdlib.h> |
| #define ANGLE_PER_MINUTE 6 |
| #define ANGLE_PER_HOUR 30 |
| |
| |
| |
| |
| |
| float minute_hand_angle(int minute, int second) |
| { |
| float minute_offset = 0; |
| minute_offset += ANGLE_PER_MINUTE * (minute + second / 60.0); |
| return minute_offset; |
| } |
| |
| float hour_hand_angle(int hour, int minute, int second) |
| { |
| float hour_offset = 0; |
| |
| hour_offset += ANGLE_PER_HOUR * (hour + (minute + second / 60.0) / 60.0); |
| return hour_offset; |
| } |
| |
| int main() |
| { |
| |
| int n; |
| struct time { |
| int hour; |
| int minute; |
| int second; |
| }time_in_day; |
| struct time* p; |
| p = &time_in_day; |
| |
| while (scanf("%d", &n) != EOF) |
| { |
| for (int i = 0; i < n; i++) |
| { |
| |
| scanf("%d %d %d", &(p->hour), &(p->minute), &(p->second)); |
| if (p->hour >= 12) p->hour -= 12; |
| |
| |
| float angle_minute = 0, angle_hour = 0; |
| angle_minute = minute_hand_angle((p->minute), (p->second)); |
| angle_hour = hour_hand_angle(p->hour, p->minute, p->second); |
| |
| |
| |
| |
| float result = fabs(angle_minute - angle_hour); |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| if (result <= 180 ) |
| { |
| |
| if(result>0) |
| printf("%.0f\n", result - 0.5); |
| else |
| printf("0\n"); |
| |
| |
| |
| |
| |
| |
| } |
| else |
| { |
| printf("%.0f\n", (360 - result) - 0.5); |
| |
| } |
| } |
| } |
| |
| return 0; |
| } |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了