Dados dos números H y M que denotan la longitud de la manecilla de las horas y los minutos y dos intervalos de tiempo (por ejemplo, T1 y T2 ) en forma de HH:MM , la tarea es encontrar la distancia recorrida por la manecilla de las horas y los minutos entre el tiempo T1 y T2 .
Ejemplos:
Entrada: H = 5, M = 7, T1 = “1:30”, T2 = “10:50”
Salida:
Distancia recorrida por el minutero: 410.50144006906635
Distancia recorrida por el horario: 24.434609527920614Entrada: H = 4, M = 5, T1 = “1:30”, T2 = “10:50”
Salida:
Distancia recorrida por el minutero: 293,21531433504737
Distancia recorrida por el horario: 19,54768762233649
Acercarse:
- Encuentre la diferencia entre los dos intervalos de tiempo T1 y T2 usando el enfoque discutido en este artículo.
- Cambie la duración de tiempo obtenida arriba en minutos como:
Total Minutes = hours * 60 + minutes
- Dado que el minutero cubre una rotación en 60 minutos, por lo tanto, el número de rotaciones cubiertas por el minutero (por ejemplo, rm ) viene dado por
- Dado que la manecilla de la hora cubre una rotación en 60*12 = 720 minutos, por lo tanto, el número de rotaciones cubiertas por la manecilla de la hora (por ejemplo, rh ) viene dado por
- La distancia total recorrida por la manecilla de la hora está dada por
- La distancia total recorrida por el minutero viene dada por
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of above approach #include<bits/stdc++.h> using namespace std; // Function to remove ':' and convert // it into an integer int removeColon(string s){ if (s.length() == 4) s = s.substr(0,1)+s.substr(2); if (s.length() == 5) s = s.substr(0,2) + s.substr(3); return stoi(s); } // function which find the difference // between time interval string diff(string s1,string s2){ // Change string as 2:21 to 221 int time1 = removeColon(s1); int time2 = removeColon(s2); // Difference between hours int hourDiff = time2 / 100 - time1 / 100 - 1; // Difference between minutes int minDiff = time2 % 100 + (60 - time1 % 100); if (minDiff >= 60){ hourDiff += 1; minDiff = minDiff - 60; } // Convert answer again in string // with ':' string res = to_string(hourDiff) + ':' + to_string(minDiff); return res; } // Function for finding the distance travelled // by minute hand and hour hand vector<float> disTravel(string T1,string T2,int M,int H) { // Find the duration between these time string dur = diff(T1, T2); // Remove colon from the dur and // convert in int int s = removeColon(dur); // Convert the time in to minute // hour * 60 + min int totalMinute = (s/100)*60 + s % 100; // Count min hand rotation float rm = float(totalMinute) / 60; // Count hour hand rotation float rh = float(totalMinute) / 720; // Compute distance traveled by min hand float minuteDistance = rm * 2*2*acos(0.0) * M; // Compute distance traveled by hour hand float hourDistance = rh * 2* 2*acos(0.0) * H; return {minuteDistance, hourDistance}; } // Driver Code int main() { // Given Time Intervals string T1 ="1:30"; string T2 ="10:50"; // Given hour and minute hand length int H = 5; int M = 7; // Function Call vector<float>distance = disTravel(T1, T2, M, H); float minuteDistance = distance[0]; float hourDistance = distance[1]; // Print the distance traveled by minute // and hour hand cout<<"Distance traveled by minute hand: "<<minuteDistance<<endl; cout<<"Distance traveled by hour hand: "<<hourDistance<<endl; } // This code is contributed by shinjanpatra
Java
/*package whatever //do not write package name here */ import java.io.*; class GFG { // Function to remove ':' and convert // it into an integer static int removeColon(String s){ if (s.length() == 4) s = s.substring(0,1)+s.substring(2); if (s.length() == 5) s = s.substring(0,2) + s.substring(3); return Integer.valueOf(s); } // function which find the difference // between time interval static String diff(String s1,String s2){ // Change string as 2:21 to 221 int time1 = removeColon(s1); int time2 = removeColon(s2); // Difference between hours int hourDiff = time2 / 100 - time1 / 100 - 1; // Difference between minutes int minDiff = time2 % 100 + (60 - time1 % 100); if (minDiff >= 60){ hourDiff += 1; minDiff = minDiff - 60; } // Convert answer again in string // with ':' String res = String.valueOf(hourDiff) + ':' + String.valueOf(minDiff); return res; } // Function for finding the distance travelled // by minute hand and hour hand static double[] disTravel(String T1,String T2,int M,int H) { // Find the duration between these time String dur = diff(T1, T2); // Remove colon from the dur and // convert in int int s = removeColon(dur); // Convert the time in to minute // hour * 60 + min int totalMinute = (s/100)*60 + s % 100; // Count min hand rotation float rm = (float)totalMinute / (float)60; // Count hour hand rotation float rh = (float)totalMinute / (float)720; // Compute distance traveled by min hand double minuteDistance = rm * 2*Math.PI * M; // Compute distance traveled by hour hand double hourDistance = rh * 2* Math.PI * H; double[] res = {minuteDistance, hourDistance}; return res; } // Driver code public static void main(String args[]) { // Given Time Intervals String T1 ="1:30"; String T2 ="10:50"; // Given hour and minute hand length int H = 5; int M = 7; // Function Call double[] distance = disTravel(T1, T2, M, H); double minuteDistance = distance[0]; double hourDistance = distance[1]; // Print the distance traveled by minute // and hour hand System.out.printf("Distance traveled by minute hand: %f%n",minuteDistance); System.out.printf("Distance traveled by hour hand: %f%n",hourDistance); } } // This code is contributed by shinjanpatra.
Python
# Python program for the above approach import math # Function to remove ':' and convert # it into an integer def removeColon(s): if (len(s) == 4): s = s[:1]+s[2:] if (len(s) == 5): s = s[:2]+s[3:] return int(s) # function which find the difference # between time interval def diff(s1, s2): # Change string as 2:21 to 221 time1 = removeColon(s1) time2 = removeColon(s2) # Difference between hours hourDiff = time2 // 100 - time1 // 100 - 1; # Difference between minutes minDiff = time2 % 100 + (60 - time1 % 100) if (minDiff >= 60): hourDiff+= 1 minDiff = minDiff - 60 # Convert answer again in string # with ':' res = str(hourDiff) + ':' + str(minDiff) return res # Function for finding the distance travelled # by minute hand and hour hand def disTravel(T1, T2, M, H): # Find the duration between these time dur = diff(T1, T2) # Remove colon from the dur and # convert in int s = removeColon(dur) # Convert the time in to minute # hour * 60 + min totalMinute =(s//100)*60 + s % 100 # Count min hand rotation rm = totalMinute / 60; # Count hour hand rotation rh = totalMinute / 720; # Compute distance traveled by min hand minuteDistance = rm * 2* math.pi * M; # Compute distance traveled by hour hand hourDistance = rh * 2* math.pi * H; return minuteDistance, hourDistance # Driver Code # Given Time Intervals T1 ="1:30" T2 ="10:50" # Given hour and minute hand length H = 5 M = 7 # Function Call minuteDistance, hourDistance = disTravel(T1, T2, M, H) # Print the distance traveled by minute # and hour hand print("Distance traveled by minute hand: " ,minuteDistance) print("Distance traveled by hour hand: " ,hourDistance )
C#
// C# implementation of above approach using System; class GFG { // Function to remove ':' and convert // it into an integer static int removeColon(string s) { if (s.Length == 4) s = s.Substring(0, 1) + s.Substring(2); if (s.Length == 5) s = s.Substring(0, 2) + s.Substring(3); return Convert.ToInt16(s); } // function which find the difference // between time interval static string diff(string s1, string s2) { // Change string as 2:21 to 221 int time1 = removeColon(s1); int time2 = removeColon(s2); // Difference between hours int hourDiff = time2 / 100 - time1 / 100 - 1; // Difference between minutes int minDiff = time2 % 100 + (60 - time1 % 100); if (minDiff >= 60) { hourDiff += 1; minDiff = minDiff - 60; } // Convert answer again in string // with ':' string res = hourDiff.ToString() + ':' + minDiff.ToString(); return res; } // Function for finding the distance travelled // by minute hand and hour hand static float[] disTravel(string T1, string T2, int M, int H) { // Find the duration between these time string dur = diff(T1, T2); // Remove colon from the dur and // convert in int int s = removeColon(dur); // Convert the time in to minute // hour * 60 + min int totalMinute = (s / 100) * 60 + s % 100; // Count min hand rotation float rm = (float)totalMinute / 60; // Count hour hand rotation float rh = (float)totalMinute / 720; // Compute distance traveled by min hand double minuteDistance = rm * 2 * 2 * Math.Acos(0.0) * M; // Compute distance traveled by hour hand double hourDistance = rh * 2 * 2 * Math.Acos(0.0) * H; return new float[2] { (float)minuteDistance, (float)hourDistance }; } // Driver Code static void Main() { // Given Time Intervals string T1 = "1:30"; string T2 = "10:50"; // Given hour and minute hand length int H = 5; int M = 7; // Function Call float[] distance = disTravel(T1, T2, M, H); float minuteDistance = distance[0]; float hourDistance = distance[1]; // Print the distance traveled by minute // and hour hand Console.WriteLine( "Distance traveled by minute hand: " + minuteDistance); Console.WriteLine("Distance traveled by hour hand: " + hourDistance); } } // The code is contributed by Gautam goel (gautamgoel962)
Javascript
<script> // JavaScript implementation of above approach // Function to remove ':' and convert // it into an integer function removeColon(s){ if (s.length == 4) s = s.substring(0,1)+s.substring(2,) if (s.length == 5) s = s.substring(0,2) + s.substring(3,) return parseInt(s) } // function which find the difference // between time interval function diff(s1, s2){ // Change string as 2:21 to 221 let time1 = removeColon(s1) let time2 = removeColon(s2) // Difference between hours let hourDiff = Math.floor(time2 / 100) - Math.floor(time1 / 100) - 1; // Difference between minutes let minDiff = time2 % 100 + (60 - time1 % 100) if (minDiff >= 60){ hourDiff += 1 minDiff = minDiff - 60 } // Convert answer again in string // with ':' let res = hourDiff.toString() + ':' + minDiff.toString() return res } // Function for finding the distance travelled // by minute hand and hour hand function disTravel(T1, T2, M, H) { // Find the duration between these time let dur = diff(T1, T2) // Remove colon from the dur and // convert in int let s = removeColon(dur) // Convert the time in to minute // hour * 60 + min let totalMinute = Math.floor(s/100)*60 + s % 100 // Count min hand rotation let rm = totalMinute / 60; // Count hour hand rotation let rh = totalMinute / 720; // Compute distance traveled by min hand let minuteDistance = rm * 2* Math.PI * M; // Compute distance traveled by hour hand let hourDistance = rh * 2* Math.PI * H; return [minuteDistance, hourDistance] } // Driver Code // Given Time Intervals let T1 ="1:30" let T2 ="10:50" // Given hour and minute hand length let H = 5 let M = 7 // Function Call let [minuteDistance, hourDistance] = [...disTravel(T1, T2, M, H)] // Print the distance traveled by minute // and hour hand document.write("Distance traveled by minute hand: " ,minuteDistance,"</br>") document.write("Distance traveled by hour hand: " ,hourDistance,"</br>") // This code is contributed by shinjanpatra </script>
Distance traveled by minute hand: 410.50144006906635 Distance traveled by hour hand: 24.434609527920614
Complejidad del tiempo: O(1)
Complejidad espacial: O(1)