diff options
Diffstat (limited to 'c')
-rw-r--r-- | c/las12uvas/483_preparandoElReloj.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/c/las12uvas/483_preparandoElReloj.cpp b/c/las12uvas/483_preparandoElReloj.cpp new file mode 100644 index 0000000..0867768 --- /dev/null +++ b/c/las12uvas/483_preparandoElReloj.cpp @@ -0,0 +1,52 @@ +#include <iostream> + +int main() { + int casos; + std::string horaA, horaB; + int primera, ultima; + int campanadas, objetivo; + int paso, resultado; + int horas, minutos, segundos; + std::string sHoras, sMinutos, sSegundos; + int segundosEnDia = 3600*24; + for (std::cin >> casos; casos > 0; casos--) { + + // Leer info + std::cin >> horaA; + std::cin >> horaB; + std::cin >> campanadas; + std::cin >> objetivo; + + // Procesar horas + primera = std::stoi(horaA.substr(0, 2))*3600; + primera += std::stoi(horaA.substr(3, 2))*60; + primera += std::stoi(horaA.substr(6, 2)); + + ultima = std::stoi(horaB.substr(0, 2))*3600; + ultima += std::stoi(horaB.substr(3, 2))*60; + ultima += std::stoi(horaB.substr(6, 2)); + + if (ultima < primera) { + ultima += segundosEnDia; + } + + // Calcular paso entre horas + paso = (ultima - primera) / (campanadas - 1); + resultado = primera + paso * (objetivo - 1); + + // Pasar resultado a formato hora + horas = resultado / 3600; + minutos = resultado % 3600 / 60; + segundos = resultado % 60; + while (horas >= 24) + horas -= 24; + // ApaƱos de ceros iniciales + (horas < 10) ? sHoras = "0" : sHoras = ""; + (minutos < 10) ? sMinutos = "0" : sMinutos = ""; + (segundos < 10) ? sSegundos = "0" : sSegundos = ""; + // Escribir resultado + std::cout << sHoras << horas << ":"; + std::cout << sMinutos << minutos << ":"; + std::cout << sSegundos << segundos << std::endl; + } +} |