10992. Сортировка
дат
Отсортируйте даты согласно
следующего критерия:
·
в порядке неубывания годов;
·
если даты имеют одинаковый год, то сортировать их следует в порядке
неубывания месяцев;
·
если даты имеют одинаковый год и месяц, то сортировать их следует в порядке
неубывания дней.
Вход. Первая строка содержит количество
дат n (1 ≤ n ≤ 1000). Каждая из следующих n строк
содержит дату в формате day.month.year.
Каждая дата задается тремя целыми числами – день (от 1 до 31), месяц (от 1 до 12)
и год (от 1900 до 2021).
Выход. Выведите даты в порядке
неубывания в таком же формате, в каком они заданы на входе.
Пример
входа |
Пример
выхода |
10 16.5.2003 28.9.2016 17.12.2009 25.1.2005 28.1.2001 5.7.1999 22.7.2020 28.1.2018 24.5.2005 6.4.2017 |
5.7.1999 28.1.2001 16.5.2003 25.1.2005 24.5.2005 17.12.2009 28.9.2016 6.4.2017 28.1.2018 22.7.2020 |
сортировка
С каждой датой свяжем
структуру MyDate, которая содержит день, месяц и год. Создадим
массив структур. Отсортируем его согласно заданного критерия.
Реализация алгоритма
Объявим структуру MyDate.
struct MyDate
{
int day, mon, year;
};
Объявим массив дат.
MyDate lst[1001];
Функция f
является компаратором, сортирующих даты согласно следующего критерия:
·
в порядке неубывания годов;
·
если даты имеют одинаковый год, то сортировать их следует в порядке
неубывания месяцев;
·
если даты имеют одинаковый год и месяц, то сортировать их следует в порядке
неубывания дней.
int f(MyDate a, MyDate b)
{
if ((a.year == b.year) && (a.mon == b.mon)) return a.day < b.day;
if (a.year == b.year) return a.mon < b.mon;
return a.year < b.year;
}
Основная часть программы. Читаем входные данные.
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d.%d.%d", &lst[i].day, &lst[i].mon, &lst[i].year);
Сортируем участников соревнования.
sort(lst, lst + n, f);
Выводим отсортированные даты.
for (i = 0; i < n; i++)
printf("%d.%d.%d\n", lst[i].day, lst[i].mon, lst[i].year);
Java реализация
import java.util.*;
class MyDate
{
int day;
int month;
int year;
public MyDate(int day, int month, int year)
{
this.day = day;
this.month = month;
this.year = year;
}
}
public class Main
{
public static class MyFun implements Comparator<MyDate>
{
public int compare(MyDate a, MyDate b)
{
if (a.year == b.year && a.month == b.month)
return a.day - b.day;
if (a.year == b.year) return a.month - b.month;
return a.year - b.year;
}
}
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
int n = con.nextInt();
ArrayList<MyDate> myDates = new
ArrayList<MyDate>();
for (int i = 0; i < n; i++)
{
String s = con.next();
StringTokenizer st = new StringTokenizer(s, ".");
int day = Integer.parseInt(st.nextToken());
int month = Integer.parseInt(st.nextToken());
int year = Integer.parseInt(st.nextToken());
myDates.add(new MyDate(day, month, year));
}
Collections.sort(myDates, new MyFun());
for (int i = 0; i < n; i++)
System.out.println(myDates.get(i).day + "." +
myDates.get(i).month + "." +
myDates.get(i).year);
con.close();
}
}