Вывести два ближайшие часы к полудню C++
Не понимаю как можно решать эту задачу, помогите пожалуйста разобраться...
нужно вывести два ближайшие часы(время) к полудню из введенных часов
Примеры
Входные данные
5
10 58
13 0
12 0
11 59
20 6
Результат работы
11 59
12 0
Входные данные
3
10 25
9 10
14 25
Результат работы
10 25
14 25
#include <iostream>
using namespace std;
class Time{
public:
int hours;
int minutes;
};
int main() {
unsigned int N;
cin >> N;
Time* t = new Time[N];
for(int i = 0; i < N; ++i) {
cin >> t[i].hours >> t[i].minutes;
}
return 0;
}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Просто отсортировать с особым критерием - считая число тем меньшим, чем оно ближе к 12:00. Проще бы хранить в минутах, но если дописывать к вашей программе, то вот что у меня получилось.
#include <iostream>
#include <algorithm>
using namespace std;
class Time {
public:
int hours;
int minutes;
};
int main() {
unsigned int N;
cin >> N;
Time* t = new Time[N];
for (int i = 0; i < N; ++i)
cin >> t[i].hours >> t[i].minutes;
partial_sort(t, t + 2, t + N,
[](auto a, auto b) {
return abs(60 * (a.hours - 12) + a.minutes) <
abs(60 * (b.hours - 12) + b.minutes);
});
cout << t[0].hours << " " << t[0].minutes << endl;
cout << t[1].hours << " " << t[1].minutes << endl;
}
Можно совсем просто - запомнить первые два значения, а потом каждое новое сравнивать с имеющимися и если оно ближе - выполнять замену самого удаленного от 12 из двух на новое. Так даже массив не нужен.