aboutsummaryrefslogtreecommitdiff
path: root/c/las12uvas/483_preparandoElReloj.cpp
blob: 08677686a30c5c38c6dc43d0f5d263fe455f610d (plain)
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;
	}
}