Лучшие решения для задач Microsoft на собеседовании. День недели на K дней позже.
Описание:
Решение:
По описанию мы имеем в качестве входных параметров: строку с названием дня недели и расстояние в днях до другого дня недели. Нам нужно найти название второго дня недели и вернуть строку с его названием. Для решения этой задачи было бы хорошо преобразовать заданный день недели из строки в число дней. Давайте посчитаем дни от 0. То есть воскресенье - 0, понедельник - 1… суббота - 6.
Тогда у нас есть расстояние между двумя днями недели в днях. И нам нужно узнать, какой день недели последний день на этой дистанции. Или, другими словами, номер дня внутри недели.
Каждая неделя содержит 7 дней, поэтому, чтобы найти число дней недели, нам нужно преобразовать расстояние между этими днями из дней в недели. Расстояние в неделях легко вычислить, если у нас есть целое число недель между заданными днями. Например, если у нас S = «Солнце» и K = 7, день недели из 7 дней тоже будет «Солнцем». Но если расстояние не делится полностью, мы можем использовать остаток после деления на 7, чтобы найти число дней в неделе. Например, пусть S = «Вт» и K = 10. Вторник - 2 дня недели. Мы должны прибавить к 10 к 2. 10 + 2 = 12 и разделить 12 на 7. Получаем остаток = 5.
Таким образом, день недели последнего дня - пятница, потому что 5-й день недели - пятница, а между вторником на этой неделе и пятницей на следующей неделе проходит 10 дней.
Код C ++:
string solution(const string &day, int k) { vector<string> days = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; unordered_map<string, int> week_map = {{"Sun", 0}, {"Mon", 1}, {"Tue", 2}, {"Wed", 3}, {"Thu", 4}, {"Fri", 5}, {"Sat", 6}}; return days[(week_map[day] + k) % 7]; }
Репозиторий с полной версией проекта вы можете найти здесь: https://github.com/jolly-fellow/microsoft/tree/master/day_of_week
Вернуться к оглавлению.