[ACM] 九度OJ 1553 时钟

286 篇文章 140 订阅
13 篇文章 0 订阅

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:1733

解决:656

题目描述:

如图,给定任意时刻,求时针和分针的夹角(劣弧所对应的角)。

输入:

输入包含多组测试数据,每组测试数据由一个按hh:mm表示的时刻组成。

输出:

对于每组测试数据,输出一个浮点数,代表时针和分针的夹角(劣弧对应的角),用角度表示,结果保留两位小数。

样例输入:
03:00
14:45
样例输出:
90.00
172.50
来源:
2014年王道论坛计算机考研机试全真模拟考试


解题思路:

求时针和分针的夹角(劣弧所对应的角)。需要注意的是分针指的一定是整刻度,而时针不一定,因为分针走的同时,时针也在微小的走,所以要求出时针偏离整刻度的偏移量。分针指的刻度为0到60,把时针也换成相同的格式h*5就可以了,每个单位刻度代表6度(360除以60)然后求劣弧所对应的角,两种情况 , abs( h- m )  和  60- max (h,m) + min(h,m) ,取两者的最小值就可以了。

代码:

#include <iostream>
#include <iomanip>
using namespace std;

double h,m;
char c;

int main()
{
    while(cin>>h)
    {
        cin>>c>>m;
        if(h>12)
            h-=12;
        h*=5;//换成和分针数字一样的计数标准,0到60,每个刻度代表的角度为360/60=6
        h=h+(m*1.0/60)*5;//计算时针偏离整点的偏移量
        if(h<m)//为了方便,始终让时针为大数字
        {
            double temp;
            temp=h;
            h=m;
            m=temp;
        }
        double result;
        if(h-m<60-h+m)//时针和分针所组成的优弧和劣弧,取劣弧
            result=h-m;
        else
            result=60-h+m;
        result*=6;//每个刻度为6度
        cout<<setiosflags(ios::fixed)<<setprecision(2)<<result<<endl;
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值