aboutsummaryrefslogtreecommitdiff
path: root/c
diff options
context:
space:
mode:
Diffstat (limited to 'c')
-rw-r--r--c/las12uvas/483_preparandoElReloj.cpp52
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;
+ }
+}