당신의 작업은 xoutput 2*x입니다. 쉬워요!? 그러나 캐치 x가 있습니다 : (아마도 무한한) 연속 분수 로 주어지며 출력은 연속 분수이어야합니다. 입력 값은 학위가 최대 2 인 실수 대수로 보장됩니다.
입력 :의 계속 된 분수 x. 이것은 정수 부분, 접두사 및 반복 부분의 세 부분으로 나뉩니다. 정수 부분은 단일 정수로 구성됩니다. 접두사와 반복 부분은 연속 분수의 접두사와 반복 부분을 설명하는 양의 정수로 된 (아마도 비어있는) 배열입니다. 예를 들어, 입력 (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])?