• Предмет: Информатика
  • Автор: mashazvezda123456789
  • Вопрос задан 7 лет назад

на с++ Министр культуры определил, что фестивали можно проводить только в субботу 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

Ответы

Ответ дал: DexelGamer
0

Алгоритм решения

Почти никакой математики - проходим по всем дням в году, начиная с первого дня, проверяем условия, обновляем ответ.


Детали

Для удобства заведем константный массив чисел - количество дней в каждом месяце. С его помощью мы будет перескакивать из последнего дня одного месяца в первый день следующего.

Нам не нужно переходить из декабря в январь!

Также заведем массив строк, хранящий названия каждого месяца.

Будем поддерживать номер текущего дня, номер текущего месяца и каким днем недели является текущий день. Текущий день и день недели у нас нумеруются с единицы, месяц - с нуля.

Пока мы не прошли весь декабрь, проверяем условия. Первый вариант: dayInWeek == суббота, day == 5 или day == 6. Второй вариант: dayInWeek == четверг, day % n == 0.

Пытаемся перейти на следующий день. Если следующий день начнется уже в следующем месяце, увеличим месяц, день сбросим до единицы. Ну и обновим день в неделе: dayInWeek = dayInWeek % 7 + 1.

Приложения:
Вас заинтересует