Задача
По заданной дате требуется определить, какое число будет послезавтра.
Входные данные
Дано число, месяц и год (год — число в промежутке от 1 до 10000).
Выходные данные
Требуется вывести, какое число будет послезавтра, в формате входных данных.
Тесты
# | Входные данные | Выходные данные |
---|---|---|
1 | 1 8 2009 | 3 8 2009 |
2 | 30 12 2009 | 1 1 2010 |
3 | 28 2 2008 | 1 3 2008 |
4 | 29 03 2017 | 31 03 2017 |
5 | 20 05 2012 | 22 05 2012 |
Код программы
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 |
#include <iostream> using namespace std; int main() { int d; int m; int y; bool x = false; cin >> d >> m >> y; d = d + 2; if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) { x = true; } if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10) { if (d > 31) { d = d % 31; m++; } } else if (m == 2) { if (x) { if (d > 29) { d = d % 29; m++; } } else { if (d > 28) { d = d % 28; m++; } } } else if (m == 12) { if (d > 31) { d = d % 31; m = 1; y++; } } else { if (d > 30) { d = d % 30; m++; } } cout << d << " " << m << " " << y; return 0; } |
Решение задачи
Для начала мы просто должны к заданной дате прибавить 2 дня.
Далее необходимо определить високосный ли год.
Чтобы определить, является ли год високосным, нужно выполнить следующие действия.
1. Если год делится на 4, перейдите к шагу 2. В противном случае перейдите к шагу 5.
2. Если год делится на 100, перейдите к шагу 3. В противном случае перейдите к шагу 4.
3. Если года делится на 400, перейдите к шагу 4. В противном случае перейдите к шагу 5.
4. Год является високосным ( 366 дней ).
5. Год не является високосным ( 365 дней ).
Дальше начинаем проходиться по месяцам, в месяцах с 31 днями, если значение дня больше 31 то берём остаток от деления этого значения на 31 и добавляем к месяцу единицу, следовательно с 30 днями, остаток от деления на 30 и так же прибавляем к месяцу единицу.
Для февраля мы должны учитывать високосный ли год. Если да, то 29 дней, если нет, то 28. Проделываем тоже что и в прошлый раз, только с остатком 29 или 28, в зависимости от года.
Для декабря, так как это последний месяц, если значение даты выходит больше 31, мы должны взять остаток от деления даты на 31, сбросить значение месяца до 1 и прибавить к значению года единицу
Ссылки
Задача на сайте e-olymp
Код решения ideone