Ваша задача, учитывая x
, вывод 2*x
. Легко, правда !? Но есть одна загвоздка: x
будет задана как (возможно, бесконечная) непрерывная дробь , а результат должен быть продолженной дробью. Входные данные гарантированно являются действительным алгебраическим числом, степень которого не больше 2.
Входные данные : продолжение доли x
. Это разделено на 3 части: целочисленная часть, префикс и повторяющаяся часть. Целая часть состоит из одного целого числа. Префикс и повторяющаяся часть являются (возможно, пустыми) массивами натуральных чисел, которые описывают префикс и повторяющуюся часть непрерывной дроби. Например, ввод (3, [1], [2, 4])
представляет собой непрерывную дробь [3; 1, 2, 4, 2, 4, ...]
.
Если повторяющаяся часть пуста, это означает рациональное число. Например, (3, [1, 2], [])
представляет [3; 1, 2] = 11/3
. Вы должны принять обе формы рационального числа (то есть (3, [1, 1, 1], [])
, которое [3; 1, 1, 1] = 11/3
также должно быть допустимым вводом).
Вывод : Выведите продолженную дробь, вдвое превышающую ввод, в том же формате, что и ввод. Если вывод является рациональным, вы можете вывести любую форму продолжения дроби. Пока ответ эквивалентен правильному ответу, это нормально; нет необходимости в «сжатии», поэтому бесконечная часть может быть немного «развернута» (например, [1; 4, 2, 3, 2, 3...]
может быть написана (1, [4], [2, 3])
или (1, [4, 2, 3], [2, 3])
). Все ответы должны быть точными.
Контрольные примеры : точный столбец формы приведен для удобства.
Input Exact Form Output
(0, [] []) 0 (0, [] []) or (-1, [1], [])
(-5, [1, 1], []) -4.5 (-9, [], []) or (-10, [1], [])
(3, [1, 2], []) 11/3 (7, [3], []) or (7, [2, 1], [])
(1, [], [2]) sqrt(2) (2, [], [1, 4])
(-1, [2], [2, 1]) -1/sqrt(3) (-2, [1, 5], [2, 6])
И , наконец, немного больше , тест , чтобы обеспечить точность: (0, [1], [6, 1, 3, 1, 42, 1, 3, 1, 6, 2]) --> (1, [], [1, 2, 1, 8, 1, 20, 1, 8, 1, 2, 1, 2])
.
Самый короткий код выигрывает!
Подсказка : Вы можете выполнять арифметику довольно простым способом для непрерывных дробей, как описано здесь . Удвоение непрерывной дроби является лишь частным случаем этого алгоритма (хотя сложная часть заключается в том, чтобы найти повторение продолжения дробной части).
Sqrt[2]
.
[3; 1, 1, 1]
будет (3, [1, 1, 1], [])
в формате ввода, который мы используем - поэтому вопрос, вероятно, должен упомянуть его в этом формате (в третьем абзаце), просто для обеспечения ясности.
(-2, [1, 5, 2], [6, 2])
ли приемлемый вывод для ввода (-1, [2], [2, 1])
? Как насчет (-2, [1, 5, 2, 6, 2, 6], [2, 6])
?