Hi, here’s your problem today. This problem was recently asked by Microsoft:

Given a time in the format of hour and minute, calculate the angle of the hour and minute hand on a clock.

def calcAngle(h, m):
  # Fill this in.

print calcAngle(3, 30)
# 75
print calcAngle(12, 30)
# 165

 

 

solution:

Java:

package testAlgorithms;

public class ClockAngleProblem {


    public static void main(String[] args) {
        System.out.println(calcAngle(3, 30));
        System.out.println(calcAngle(12, 30));
        System.out.println(calcAngle(12, 45));
        System.out.println(calcAngle(12, 0));
        System.out.println(calcAngle(3, 30));
        System.out.println(calcAngle(2, 23));
        System.out.println(calcAngle(2, 60));
    }

    /**
     * 必须是浮点型,因为没法保证角度一定是int
     * the returned value must be float or double type
     * @param hour
     * @param minute
     * @return
     */
    static double calcAngle(int hour, int minute) {
        if (hour >= 12) {
            hour = hour - 12;
        }

        // an hour is equal to 30 degree
        double hMultiplier = 360 / 12;
        // a minute is equal to 6 degree
        double mMultiplier = 360 / 60;
        double angle = Math.abs(hMultiplier * (hour + (minute / 60.0)) - mMultiplier * minute);
        //需要的是小于等于180
        //we need the angle that is less than or equal to 180 degree
        return Math.min(angle, 360 - angle);
    }
}

/*
output:
75.0
165.0
112.5
0.0
75.0
66.5
90.0
 */

 

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.