This problem is know as Clock angle problem where we need to find angle between hands of an analog clock at a given time.
Examples:
Input: h = 12:00, m = 30.00 Output: 165 degree Input: h = 3.00, m = 30.00 Output: 75 degree
The idea is to take 12:00 (h = 12, m = 0) as a reference. Following are detailed steps.
1) Calculate the angle made by hour hand with respect to 12:00 in h hours and m minutes.
2) Calculate the angle made by minute hand with respect to 12:00 in h hours and m minutes.
3) The difference between two angles is the angle between two hands.
How to calculate the two angles with respect to 12:00?
The minute hand moves 360 degree in 60 minute(or 6 degree in one minute) and hour hand moves 360 degree in 12 hours(or 0.5 degree in 1 minute). In h hours and m minutes, the minute hand would move (h*60 + m)*6 and hour hand would move (h*60 + m)*0.5.
C++
// C++ program to find angle between hour and minute hands #include <bits/stdc++.h> using namespace std; // Utility function to find minimum of two integers int min( int x, int y) { return (x < y)? x: y; } int calcAngle( double h, double m) { // validate the input if (h <0 || m < 0 || h >12 || m > 60) printf ( "Wrong input" ); if (h == 12) h = 0; if (m == 60) m = 0; // Calculate the angles moved // by hour and minute hands // with reference to 12:00 int hour_angle = 0.5 * (h * 60 + m); int minute_angle = 6 * m; // Find the difference between two angles int angle = abs (hour_angle - minute_angle); // Return the smaller angle of two possible angles angle = min(360 - angle, angle); return angle; } // Driver program to test above function int main() { cout << calcAngle(9, 60) << endl; cout << calcAngle(3, 30) << endl; return 0; } // This is code is contributed by rathbhupendra |
C
// C program to find angle between hour and minute hands #include <stdio.h> #include <stdlib.h> // Utility function to find minimum of two integers int min( int x, int y) { return (x < y)? x: y; } int calcAngle( double h, double m) { // validate the input if (h <0 || m < 0 || h >12 || m > 60) printf ( "Wrong input" ); if (h == 12) h = 0; if (m == 60) m = 0; // Calculate the angles moved by hour and minute hands // with reference to 12:00 int hour_angle = 0.5 * (h*60 + m); int minute_angle = 6*m; // Find the difference between two angles int angle = abs (hour_angle - minute_angle); // Return the smaller angle of two possible angles angle = min(360-angle, angle); return angle; } // Driver program to test above function int main() { printf ( "%d n" , calcAngle(9, 60)); printf ( "%d n" , calcAngle(3, 30)); return 0; } |
Java
// Java program to find angle between hour and minute hands import java.io.*; class GFG { // Function to calculate the angle static int calcAngle( double h, double m) { // validate the input if (h < 0 || m < 0 || h > 12 || m > 60 ) System.out.println( "Wrong input" ); if (h == 12 ) h = 0 ; if (m == 60 ) m = 0 ; // Calculate the angles moved by hour and minute hands // with reference to 12:00 int hour_angle = ( int )( 0.5 * (h* 60 + m)); int minute_angle = ( int )( 6 *m); // Find the difference between two angles int angle = Math.abs(hour_angle - minute_angle); // smaller angle of two possible angles angle = Math.min( 360 -angle, angle); return angle; } // Driver program public static void main (String[] args) { System.out.println(calcAngle( 9 , 60 )+ " degree" ); System.out.println(calcAngle( 3 , 30 )+ " degree" ); } } // Contributed by Pramod Kumar |
Python
# Python program to find angle # between hour and minute hands # Function to Calculate angle b/w # hour hand and minute hand def calcAngle(h,m): # validate the input if (h < 0 or m < 0 or h > 12 or m > 60 ): print ( 'Wrong input' ) if (h = = 12 ): h = 0 if (m = = 60 ): m = 0 # Calculate the angles moved by # hour and minute hands with # reference to 12:00 hour_angle = 0.5 * (h * 60 + m) minute_angle = 6 * m # Find the difference between two angles angle = abs (hour_angle - minute_angle) # Return the smaller angle of two # possible angles angle = min ( 360 - angle, angle) return angle # Driver program h = 9 m = 60 print ( 'Angle ' , calcAngle(h,m)) # This code is contributed by Danish Raza |
C#
// C# program to find angle between // hour and minute hands using System; class GFG { // Function to calculate the angle static int calcAngle( double h, double m) { // validate the input if (h < 0 || m < 0 || h > 12 || m > 60) Console.Write( "Wrong input" ); if (h == 12) h = 0; if (m == 60) m = 0; // Calculate the angles moved by hour and // minute hands with reference to 12:00 int hour_angle = ( int )(0.5 * (h * 60 + m)); int minute_angle = ( int )(6 * m); // Find the difference between two angles int angle = Math.Abs(hour_angle - minute_angle); // smaller angle of two possible angles angle = Math.Min(360 - angle, angle); return angle; } // Driver code public static void Main () { Console.WriteLine(calcAngle(9, 60)); Console.Write(calcAngle(3, 30)); } } // This code is contributed by Nitin Mittal. |
PHP
<?php // PHP program to find // angle between hour // and minute hands // Utility function to // find minimum of two // integers function mintwo( $x , $y ) { return ( $x < $y ) ? $x : $y ; } function calcAngle( $h , $m ) { // validate the input if ( $h <0 || $m < 0 || $h >12 || $m > 60) echo "Wrong input" ; if ( $h == 12) $h = 0; if ( $m == 60) $m = 0; // Calculate the angles // moved by hour and // minute hands with // reference to 12:00 $hour_angle = 0.5 * ( $h * 60 + $m ); $minute_angle = 6 * $m ; // Find the difference // between two angles $angle = abs ( $hour_angle - $minute_angle ); // Return the smaller angle // of two possible angles $angle = min(360 - $angle , $angle ); return $angle ; } // Driver Code echo calcAngle(9, 60), "
" ; echo calcAngle(3, 30), "
" ; // This code is contributed by ajit ?> |
Output:
90 75
Exercise: Find all times when hour and minute hands get superimposed.
leave a comment
1 Comments