题目描述:
-
如图,给定任意时刻,求时针和分针的夹角(劣弧所对应的角)。
- 输入:
-
输入包含多组测试数据,每组测试数据由一个按hh:mm表示的时刻组成。
- 输出:
-
对于每组测试数据,输出一个浮点数,代表时针和分针的夹角(劣弧对应的角),用角度表示,结果保留两位小数。
- 样例输入:
-
03:00 14:45
- 样例输出:
-
90.00 172.50
我的解答:
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))); } } }