首页 > 计算时钟的夹角问题(O_O)?

计算时钟的夹角问题(O_O)?

这是题目
背景:
钟面上的时针和分针之间的夹角总是在 0 度~ 359 度之间。举例来说,在十二点的时候两针之间的夹角为 0 度,而在六点的时候夹角为 180 度,在三点的时候为 90 度。本题要解决的是计算 0:00 到 12:00之间任意一个时间的夹角。
输入:
每组测试数据包含两个数字:第一个数字代表小时 ( 大于等于 0 小于等于 12) ,第二个数字代表分 ( 在区间 [0, 59] 上 ) 。
输出:
对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。

友情提示:

(1)以表中心到12点的连线为基准,分针每走1分钟是6度,时针与基准的夹角每个小时也是30度,从整点开始,每过1分钟时针再增加0.5度。

(2)时钟夹角计算公式|5.5m-30h|,h为时针,m为分针。求浮点型绝对值的函数为fabs,需要包含math.h头文件
(3)输出格式:printf("At %d:%02d the angle is %.1f degrees.\n",hour,minute,angle);

这是我写的程序

#include<math.h>  
#include<stdio.h>  
int main()  
{  
    float angle;  
    int hour,minute;  
    scanf("%d%d",&hour,&minute);  
    if(hour==12)   angle=fabs(5.5*minute);  
    else           angle=fabs(5.5*minute-30*hour);  
    printf("At %d:%02d the angle is %.1f degrees.\n",hour,minute,angle);  
} 

测试了十四个有三个错误,可是我不知道那里有错误……


这是你算法的问题,angle不是这样算的,应该把分钟和时钟在当时的真实位置算出来再相减取绝对值即可
附上修改后的C语言代码:

#include<math.h>
#include<stdio.h>

int main() 
{
    float hour_angle; //时钟当前的真实位置 
    float minute_angle; //分钟当前的真实位置 
    float angle;
    int hour,minute;  
    scanf("%d%d",&hour,&minute);

    if(hour==12)
        hour_angle=((float)minute/60)*30;  
    else
        hour_angle=(hour+(float)minute/60)*30; 

    minute_angle=minute*6;
    angle=fabs(minute_angle-hour_angle); //指针的夹角

    printf("At %d:%02d the angle is %.1f degrees.\n",hour,minute,angle);  
} 
【热门文章】
【热门文章】