на с++ Министр культуры определил, что фестивали можно проводить только в субботу 5-го или субботу 6-го числа любого месяца, а также в четверг каждого числа, кратного n (n меняется от года к году), любого месяца.
Необходимо определить все возможные даты проведения фестивалей на ближайший год, если первое января был k-ый день недели (где k=1 - понедельник, а k=7 - воскресенье).
Формат входных данных
Вводятся целые неотрицательные числа n (1 <= n <= 31) и k (1 <= k <= 7)
Формат выходных данных
Вывести даты в столбик в формате: "14 of June", где June - название месяца (июнь)
Примечания
Названия месяцев: January (январь), February (февраль), March (март), April (апрель), May (май), June (июнь), July (июль), August (август), September (сентябрь), October (октябрь), November (ноябрь), December (декабрь).
В феврале 28 дней.
Примеры
входные данные выходные данные
27 5
6 of February
6 of March
27 of May
5 of June
6 of November
Answers & Comments
Алгоритм решения
Почти никакой математики - проходим по всем дням в году, начиная с первого дня, проверяем условия, обновляем ответ.
Детали
Для удобства заведем константный массив чисел - количество дней в каждом месяце. С его помощью мы будет перескакивать из последнего дня одного месяца в первый день следующего.
Нам не нужно переходить из декабря в январь!
Также заведем массив строк, хранящий названия каждого месяца.
Будем поддерживать номер текущего дня, номер текущего месяца и каким днем недели является текущий день. Текущий день и день недели у нас нумеруются с единицы, месяц - с нуля.
Пока мы не прошли весь декабрь, проверяем условия. Первый вариант: dayInWeek == суббота, day == 5 или day == 6. Второй вариант: dayInWeek == четверг, day % n == 0.
Пытаемся перейти на следующий день. Если следующий день начнется уже в следующем месяце, увеличим месяц, день сбросим до единицы. Ну и обновим день в неделе: dayInWeek = dayInWeek % 7 + 1.