Обозначим дни недели числами от 1 (понедельник) до 7 (воскресенье) соответственно. По известному m —...

Тематика Информатика
Уровень 5 - 9 классы
календарь дни недели вычисление без условий без циклов арифметика алгоритмы математика даты
0

Обозначим дни недели числами от 1 (понедельник) до 7 (воскресенье) соответственно. По известному m — дню недели первого числа текущего месяца — определите день недели числа n. По возможности решите задачу без использования условных операторов и\или циклов. Входные данные На вход программе подаются 2 целых числа 1 ≤ n ≤ 31, 1 ≤ m ≤ 7, каждое в отдельной строке Выходные данные Выведите день недели числа n.

avatar
задан 5 месяцев назад

3 Ответа

0

Для решения данной задачи без использования условных операторов и циклов можно воспользоваться формулой: [d = (m + n - 1) \mod 7] где d - день недели числа n (1 - понедельник, 2 - вторник и т.д.), m - день недели первого числа текущего месяца, n - число текущего месяца.

Пример: Пусть у нас первое число текущего месяца выпало на четверг (m = 4), а мы хотим узнать день недели числа 15 (n = 15). Подставляем значения в формулу: [d = (4 + 15 - 1) \mod 7 = 18 \mod 7 = 4] Таким образом, 15 число в этом случае также выпадет на четверг.

Следует помнить, что результат деления (m + n - 1) на 7 даёт остаток от деления, который и будет определять день недели числа n.

avatar
ответил 5 месяцев назад
0

n = (m + (n - 1)) % 7

avatar
ответил 5 месяцев назад
0

Для решения этой задачи мы можем воспользоваться арифметикой по модулю, что позволит нам избежать использования условных операторов и циклов. Давайте подробнее разберем алгоритм.

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

  1. Понимание проблемы:

    • У нас есть два числа: m — день недели первого числа месяца, и n — число, для которого мы хотим определить день недели.
    • Нам необходимо определить, какой день недели соответствует числу n.
  2. Представление дней недели:

    • Мы представляем дни недели числами от 1 до 7, где 1 — понедельник, 2 — вторник, ., 7 — воскресенье.
  3. Использование арифметики по модулю:

    • Если m — это день недели первого числа месяца, то n-ое число будет через n-1 дней от первого числа.
    • Мы можем вычислить день недели для n-го числа, используя формулу: [ \text{day_of_week} = (m + (n - 1)) \% 7 ]
    • Здесь (n - 1) — это количество дней от первого числа до n-го числа.
    • (m + (n - 1)) — это сдвиг по дням недели от первого числа.
    • Операция взятия по модулю 7 (% 7) используется для того, чтобы результат оставался в пределах от 1 до 7.
  4. Особенность с модулем:

    • Если результат модульной операции равен 0, это означает, что день недели — воскресенье (7), поскольку у нас нумерация дней недели начинается с 1.
  5. Итоговая формула с учетом особенностей:

    • С учетом того, что нам нужно корректно обработать случай, когда результат операции равен 0, итоговая формула будет выглядеть так: [ \text{day_of_week} = ((m + (n - 1) - 1) \% 7) + 1 ]
    • Здесь мы сначала вычитаем 1, чтобы сдвинуть диапазон значений в подходящий для корректной работы с модулем (от 0 до 6), а потом добавляем 1, чтобы вернуть в диапазон от 1 до 7.

Пример:

  • Пусть m = 3 (среда) и n = 10.
  • Подставим в формулу: [ \text{day_of_week} = ((3 + (10 - 1) - 1) \% 7) + 1 = (11 \% 7) + 1 = 4 + 1 = 5 ]
  • Значит, 10-е число приходится на 5-й день недели, то есть на пятницу.

Этот метод позволяет эффективно определить день недели для любого дня месяца без использования условных операторов или циклов.

avatar
ответил 5 месяцев назад

Ваш ответ

Вопросы по теме