Daniela é enfermeira em um grande hospital, e tem os horários de trabalho muito variáveis. Para piorar, ela tem sono pesado, e uma grande dificuldade para acordar com relógios despertadores.
Recentemente ela ganhou de presente um relógio digital, com alarme com vários tons, e tem esperança que isso resolva o seu problema. No entanto, ela anda muito cansada e quer aproveitar cada momento de descanso. Por isso, carrega seu relógio digital despertador para todos os lugares, e sempre que tem um tempo de descanso procura dormir, programando o alarme despertador para a hora em que tem que acordar. No entanto, com tanta ansiedade para dormir, acaba tendo dificuldades para adormecer e aproveitar o descanso.
Um problema que a tem atormentado na hora de dormir é saber quantos minutos ela teria de sono se adormecesse imediatamente e acordasse somente quando o despertador tocasse. Mas ela realmente não é muito boa com números, e pediu sua ajuda para escrever um programa que, dada a hora corrente e a hora do alarme, determine o número de minutos que ela poderia dormir.
Entrada
A entrada contém vários casos de teste. Cada caso de teste é descrito em uma linha, contendo quatro números inteiros H1, M1, H2 e M2, com H1:M1 representando a hora e minuto atuais, e H2:M2 representando a hora e minuto para os quais o alarme despertador foi programado (0≤H1≤23, 0≤M1≤59, 0≤H2≤23, 0≤M2 ≤59).
O final da entrada é indicado por uma linha que contém apenas quatro zeros, separados por espaços em branco.
Saída
Para cada caso de teste da entrada seu programa deve imprimir uma linha, cada uma contendo um número inteiro, indicando o número de minutos que Daniela tem para dormir.
O resultado de seu programa deve ser escrito na saída padrão.
Exemplo
Entrada | Saída |
1 5 3 5 23 59 0 34 21 33 21 10 0 0 0 0 | 120 35 1417 |
Dica
O primeiro passo consiste em transformar cada hora em minutos e contabilizar os minutos totais. Se o momento atual (primeiro horário) for menor do que o programado (segundo horário), a resposta será a diferença entre o programado e o atual. Caso contrário, além da diferença anterior, será necessário adicionar a quantidade de minutos do 1 dia (24*60 = 1440).
Solução em C/C++
#include <stdio.h>
int main () {
int h1, h2, m1, m2, t1, t2;
while (1) { //repete infinitamente
scanf ("%i %i %i %i", &h1, &m1, &h2, &m2);
if (h1==0 && h2==0 && m1==0 && m2==0) {
break; //para o while caso valores zero sejam fornecidos na entrada
}
t1 = (h1 * 60) + m1;
t2 = (h2 * 60) + m2;
if (t1 < t2) {
printf ("%i\n", t2-t1);
} else {
printf ("%i\n", 1440+(t2-t1)); //24*60 = 1440
}
}
return 0;
}
Teste o código: http://ideone.com/9dVEYd
Solução em Python
while True:
#leitura dos 4 valores
h1 = int(input())
m1 = int(input())
h2 = int(input())
m2 = int(input())
#testa condição de parada
if h1==0 and h2==0 and m1==0 and m2==0:
break
t1 = (h1 * 60) + m1;
t2 = (h2 * 60) + m2;
if t1 < t2:
print t2-t1
else:
print 1440+(t2-t1) #24*60 = 1440
Teste o código: http://www.codeskulptor.org/#user42_yY9aclqqC3_0.py
Embora o algoritmo na função main() seja funcional para as linguagens de programação C e C++, segue abaixo a codificação específica para a linguagem C++ (a solução foi inspirada a partir do comentário feito por Luis Henrique Veiga Amarante).
#include <iostream>
using namespace std;
int main()
{
int hora_dormir, minuto_dormir, hora_acordar, minuto_acordar, acorda_caraio, mi, ho;
/* mi – representa os minutos de sono
ho – representa as horas de sono*/
while (1) {
cin >> hora_dormir;
cin >> minuto_dormir;
cin >> hora_acordar;
cin >> minuto_acordar;
if (hora_acordar ==00 && hora_dormir ==0 && minuto_acordar ==00 && minuto_dormir ==00) {
return 0;
}
ho = (hora_dormir * 60) + minuto_dormir;
mi = (hora_acordar * 60) + minuto_acordar;
if ( ho < mi) {
cout << mi - ho << endl;
} else {
cout << 1440 + (mi - ho) << endl;
}
}
return 0;
}
#include
#include
#include
using namespace std;
int main()
{
int hora_dormir, minuto_dormir, hora_acordar, minuto_acordar, acorda_caraio, mi, ho;
/* mi – representa os minutos de sono
ho – representa as horas de sono*/
cout <> hora_dormir;
cout <> minuto_dormir;
cout <> hora_acordar;
cout <> minuto_acordar;
if (hora_acordar ==00 && hora_dormir ==0 && minuto_acordar ==00 && minuto_dormir ==00)
{
return 0;
}
ho = (hora_dormir * 60) + minuto_dormir;
mi = (hora_acordar * 60) + minuto_acordar;
if ( ho < mi)
{
cout << "Hora de acordar: "<< mi – ho;
}
else
{
cout << "Hora de acordar: "<< 1440 + (mi – ho);
}
return 0;
}
É importante observar que o seu algoritmo apenas funciona para um caso de testes.