Это похоже на упрощение дробей, но с датами!
Ввод вашей программы должен быть в форме mm/dd
Например
3/4 //March 4
12/15 //December 15
1/1 // January 1
Мы предполагаем, что ввод будет действительным, так что месяцы содержат следующие числа дней:
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
Работа вашей программы состоит в том, чтобы принять предполагаемый допустимый ввод и итеративно (или рекурсивно) упростить дату, и на каждой итерации (включая 0-е) выводить дату с полным названием месяца, как написано выше.
Например:
Учитывая ввод:
12/18
Будет выходной
December 18
June 9
February 3
Ввод, который уже упрощен, выводит только сам:
11/17
Выходы:
November 17
Названия месяцев не могут быть получены из функции на вашем языке. Строки могут быть запутаны, вычислены, как вам угодно, но вы не можете использовать стандартную функцию, такую как GetMonthString (4) или что-то еще, вы должны либо написать эту функцию, либо найти способ вывода названий месяцев, как описано.
Я не могу вспомнить ни одного случая, когда упрощенная дата приводит к недопустимой дате, но если вы когда-либо создадите недопустимую дату, выведите:
Illegal Date
Но если вы уверены, что этого не произойдет, вам не нужен код, охватывающий этот случай. Выводимые даты всегда должны быть действительными в соответствии с тем, что было описано выше (само собой разумеется, что месяцы и дни начинаются с 1).
Алгоритм:
На каждой итерации вы делите на наименьшее число, которое делит числитель и знаменатель.
То есть вы находите все числа такими, что деление числителя и знаменателя на это число приводит к созданию нового числителя и знаменателя, которые являются целыми числами (общие множители). Выберите наименьший и по отдельности разделите числитель и знаменатель, чтобы получить новую дробь. Если единственное число, которое вы можете разделить, это 1, то вы максимально упростили и останавливаетесь.
Надеюсь, это понятно.
Разрешен любой язык. Это Code Golf, самый короткий код выигрывает!
12/18
до , 6/9
а не 4/6
(я не получаю все итерации беспорядок ... когда я упрощаю фракцию я получил immedialtely в результате упрощаются значение)?