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

Ответы 1

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

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

    Детали

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

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

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

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

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

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

    answer img
    • Автор:

      herring
    • 5 лет назад
    • 0
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years