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