1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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;
}
}
|