Вопрос задан 16.03.2021 в 18:49. Предмет Информатика. Спрашивает Sikan Daria.

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

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Мироненко Софья.

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

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


Детали

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

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

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

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

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

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


0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения этой задачи на C++ можно использовать циклы и условные операторы. Вот пример кода, который решает задачу:

cpp
#include <iostream> #include <string> bool isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } int main() { int n, k; std::cin >> n >> k; // Массив с названиями месяцев std::string months[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; // Перебираем все месяцы for (int month = 1; month <= 12; month++) { // Проверяем фестивали в субботу int saturday = (k <= 6 - month % 2) ? 5 - k + month % 2 : 12 - k + month % 2; if (saturday <= 28) { std::cout << saturday << " of " << months[month - 1] << std::endl; } // Проверяем фестивали в четверг if (n > 0) { for (int day = 1; day <= 31; day++) { if (day % n == k % n && day <= (isLeapYear(2023) ? 29 : 28)) { std::cout << day << " of " << months[month - 1] << std::endl; } } } } return 0; }

В этом коде мы сначала считываем значения n и k из входных данных. Затем мы используем цикл for, чтобы перебрать все месяцы. Внутри этого цикла мы сначала проверяем возможность проведения фестиваля в субботу, а затем в четверг с использованием ещё одного вложенного цикла. Если условия выполняются, мы выводим дату фестиваля в соответствующем формате.

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

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос