e-olymp 31. Суеверный Дед Мороз

Задача

Как известно, в разные годы дежурят и развозят подарки разные Деды Морозы. Но все они суеверны — развозят подарки на протяжении всего года, кроме дней, когда на календаре Деда Мороза «Пятница 13».

Сколько дней Дед Мороз не развозил подарки во время своего дежурства?

Входные данные

В первой строке задано количество смен $k$ дежурства Деда Мороза.

Далее в k строках указаны года $a$ и $b$ ($1920 ≤ a ≤ b ≤ 2050$ по григорианскому календарю), попадающие на очередную смену.

Выходные данные

Вывести количество дней, когда Дед Мороз не будет развозить подарки.

Тесты

Ввод Вывод
1 2
1999 2000
1991 1997
13
2 3
1939 1945
1937 1938
1953 1964
37
3 3
1993 1996
2007 2017
1979 1981
32
4 4
1997 1999
1967 1972
2032 2032
1930 1933
24
5 4
1959 1960
1965 1966
1991 2011
1947 1959
63

Код программы

Решение задачи

Сперва стоит сказать, что полный цикл чередования лет с пятницей 13 в одни и те же месяца — 28 лет. Всего в году их может быть от 1 до 3. Всего в этих 28 годах будут 4 года с тремя пятницами 13 и по 12 с одной и двумя.
Все решение задачи сводится сводится к тому, чтобы посчитать количество пятниц 13 в каждом году данного нам отрезка времени. Создадим два массива — c2 и c3 — каждый будет содержать остатки от деления лет, содержащих 2 и 3 пятницы 13 соответсвенно, на 28. Все прочие остатки от деления «достанутся» годам, в которых 1 пятница 13; отдельный массив для них, очевидно, смысла создавать нет.
Сначала, по условию, вводим число смен и после в цикле года очередной смены. Для каждого года из отдельной смены считаем количество пятниц 13 путём проверки в соответствующих массивах остатка от деления этого года на 28. Если его нет в двух массивах, то, очевидно, в этом году всего одна пятница 13 и мы прибавляем к счетчику пятниц counter 1. Если все-таки есть, то прибавляем 2 или 3 в зависимости от того, в каком массиве нашлось необходимое число. В конце выводим значение счётчика.
Отметим, что задача решается и без использования массивов, но в таком случае придётся проверить остаток от деления каждого года на 28 на равенство числам, которые в данном случае находятся в массивах.

Ссылки

код на ideone
условие задачи на e-olymp

Related Images:

e-olymp 1624. Послезавтра

Задача

По заданной дате требуется определить, какое число будет послезавтра.

Входные данные

Дано число, месяц и год (год — число в промежутке от 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

Код программы

Решение задачи

Для начала мы просто должны к заданной дате прибавить 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

Related Images: