Дата публикации:

C++ задача Горыныч. Однажды Добрыня Никитич решил наведаться к Змею Горынычу.

C++ задача Горыныч. Однажды Добрыня Никитич решил наведаться к Змею Горынычу.

Для решения данной задачи можно использовать switch-case конструкцию, чтобы определить количество дней, которое нужно ждать Добрыне Никитичу.

Вначале, нужно определить количество дней в каждом месяце. Для этого можно использовать switch-case конструкцию, где каждому месяцу будет соответствовать определенное количество дней.

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

Наконец, нужно вычесть полученное количество дней из общего количества дней в году (365 или 366, в зависимости от високосного года), чтобы определить сколько дней осталось до конца года.

Вот пример решения данной задачи на языке C++:

#include <iostream>

int main() {
    int year, month, day;
    std::cin >> year >> month >> day;

    int daysInMonth;
    switch (month) {
        case 1: case 3: case 5: case 7: case 8: case 10: case 12:
            daysInMonth = 31;
            break;
        case 4: case 6: case 9: case 11:
            daysInMonth = 30;
            break;
        case 2:
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                daysInMonth = 29;
            } else {
                daysInMonth = 28;
            }
            break;
    }

    int daysPassed = 0;
    for (int i = 1; i < month; i++) {
        switch (i) {
            case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                daysPassed += 31;
                break;
            case 4: case 6: case 9: case 11:
                daysPassed += 30;
                break;
            case 2:
                if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                    daysPassed += 29;
                } else {
                    daysPassed += 28;
                }
                break;
        }
    }
    daysPassed += day;

    int daysLeft;
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
        daysLeft = 366 - daysPassed;
    } else {
        daysLeft = 365 - daysPassed;
    }

    std::cout << daysLeft << std::endl;

    return 0;
}

В данном примере, программа считывает год, месяц и день с помощью функции std::cin. Затем, используя switch-case конструкцию, определяет количество дней в указанном месяце и количество дней, которое прошло с начала года до указанной даты. Наконец, вычисляется количество дней, оставшихся до конца года, и выводится на экран с помощью функции std::cout.