OJ-1:时钟问题【九度1553】

题目描述:

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

 

输入:

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

 

输出:

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

 

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

我的解答:

package jobdu.wangdao;

import java.util.Scanner;

/**
 * 给定任意时刻,求时针和分针的夹角(劣弧所对应的角)。
 * */
public class Question1553 {

    /**
     * 计算时针位置
     * 
     * @param hour
     * @param minute
     * @return
     */
    private static double houreAngle(int hour, int minute) {
        double angle = (hour % 12 / 12.0) * 360;// 本小时的角度
        angle += (minute / 60.0) * (360 / 12);// 加上本小时走过的角度
        return angle;
    }

    /**
     * 计算分针位置
     * 
     * @param minute
     * @return
     */
    private static double minuteAngle(int minute) {
        double angle = (minute / 60.0) * 360;
        return angle;
    }

    /**
     * 计算圆周内两个刻度之间的锐夹角
     * 
     * @param hourAngle
     * @param minuteAngle
     * @return
     */
    private static double acuteAngle(double hourAngle, double minuteAngle) {
        double diff = Math.abs(hourAngle - minuteAngle);
        if (diff >= 180)
            diff = 360 - diff;
        return diff;
    }

    /**
     * 计算某个时刻时针分针夹角
     * 
     * @param time
     * @return
     */
    public static double clockAngle(String time) {
        int hour = Integer.parseInt(time.split(":")[0]);
        int minute = Integer.parseInt(time.split(":")[1]);
        return acuteAngle(houreAngle(hour, minute), minuteAngle(minute));
    }

    public static void main(String[] args) {
        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String time = scanner.nextLine();
            System.out.println(String.format("%.2f", clockAngle(time)));
        }
    }
}

 

转载于:https://www.cnblogs.com/henuadtc/p/4230189.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值