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

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

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

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

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
ответил месяц назад
0

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

avatar
ответил месяц назад
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
ответил месяц назад

Ваш ответ

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