Вы решили посмотреть фильм. Он начинается в h1:m1 и заканчивается в h2:m2. Гарантируется, что фильм длится четное количество минут, а также фильм начинается и заканчивается в один и тот же день. Также гарантируется, что фильм длится хотя бы две минуты. Найдите время середины фильма.
Входные данные
В первой строке вводится время начала фильма h1:m1 в формате hh:mm.
Во второй строке в таком же формате задано время конца фильма h2:m2.
Гарантируется, что 0≤h1,h2≤23 и 0≤m1,m2≤59.
Выходные данные
Выведите время конца фильма так же в формате hh:mm.
Может не самое простое решение, но по быстрому пока только так получилось:
#include <cstdlib>
#include <iostream>
#include <sstream>
using namespace std;
unsigned int h1, m1; //Время начала фильма
unsigned int h2, m2; //Время окончания фильма
unsigned int hs; //Время начала фильма (в минутах от начала дня)
unsigned int he; //Время завершения фильма (в минутах от начала дня)
string ts, te;
stringstream ss;
//Возвращает количество минут с начала дня до h:m
unsigned int GetMinutesFromDay(unsigned int h, unsigned int m)
{
return h * 60 + m;
}
//Получает количество минут с начала дня начала и конца фильма.
//Возвращает время середины фильма в виде строки hh:mm
string MinutesToTime(unsigned int t)
{
string str;
unsigned int h = t / 60;
unsigned int m = t - (h * 60);
stringstream sh, sm;
sh << h;
sm << m;
str = sh.str() + ":" + sm.str();
return str;
}
//Получает количество минут с начала дня начала и конца фильма.
//Возвращает время середины фильма в виде строки hh:mm
string GetMidTime(unsigned int s, unsigned int e)
{
string str;
//Середина фильма от начала дня в минутах
unsigned int t = (s + (e - s) / 2);
unsigned int h = t / 60;
unsigned int m = t - (h * 60);
stringstream sh, sm;
sh << h;
sm << m;
str = sh.str() + ":" + sm.str();
return str;
}
//*****************
// ОСНОВНАЯ ПРОГРАММА
//*****************
int main(int argc, char *argv[])
{
//Ввод данных
cout << "Beginning of the film = "; cin >> ts;
cout << "End of the film = "; cin >> te;
ss << ts[0] << ts[1];
ss >> h1;
ss.clear();
ss << ts[3] << ts[4];
ss >> m1;
ss.clear();
ss << te[0] << te[1];
ss >> h2;
ss.clear();
ss << te[3] << te[4];
ss >> m2;
ss.clear();
//Вычисления
hs = GetMinutesFromDay(h1, m1); //Начало в минутах
he = GetMinutesFromDay(h2, m2); //Конец в минутах
cout << "Time the middle of the movie = " << GetMidTime(hs, he) << endl;
cout << "End time of the movie = " << MinutesToTime(he) << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Решение простых задач на С++ можно посмотреть здесь.