스턴 Brocot 시퀀스 Fibonnaci 형상 시퀀스로서 구성 될 수있는 다음이다 :
- 로 시퀀스를 초기화
s(1) = s(2) = 1
- 카운터 설정
n = 1
s(n) + s(n+1)
시퀀스에 추가s(n+1)
시퀀스에 추가- 증가
n
, 3 단계로 돌아 가기
이것은 다음과 같습니다.
다른 특성 중에서도 Stern-Brocot 시퀀스를 사용하여 가능한 모든 양의 유리수를 생성 할 수 있습니다. 모든 합리적인 숫자는 정확히 한 번 생성되며 항상 가장 간단한 용어로 나타납니다. 예를 들어, 1/3
순서의 4 유리수하지만, 해당 숫자이며 2/6
, 3/9
전혀 표시되지 않습니다는 등.
위에서 설명한 것처럼 n 번째 합리적 숫자를로 정의 할 수 있습니다 r(n) = s(n) / s(n+1)
. 여기서 s(n)
n 번째 Stern-Brocot 수입니다.
문제는 Stern-Brocot 시퀀스를 사용하여 생성 된 n 번째 유리수를 출력하는 프로그램 또는 함수를 작성하는 것입니다.
- 위에서 설명한 알고리즘은 1- 색인입니다. 출품작의 색인이 0 인 경우 답변에 기재하십시오.
- 설명 된 알고리즘은 설명 목적으로 만 사용되며 원하는 방식으로 하드 코딩을 제외하고 출력을 도출 할 수 있습니다.
- STDIN, 기능 매개 변수 또는 기타 합리적인 입력 메커니즘을 통해 입력 할 수 있습니다.
- Ouptut는 STDOUT, 콘솔, 함수 리턴 값 또는 기타 합리적인 출력 스트림 일 수 있습니다.
- 출력 형태의 문자열로해야합니다
a/b
,a
그리고b
스턴 - Brocot 순서에서 관련 항목입니다. 출력 전에 분수를 평가하는 것은 허용되지 않습니다. 예를 들어 input의12
경우 output이2/5
아닌 이어야합니다0.4
. - 표준 허점은 허용되지 않습니다
이것은 code-golf 이므로 바이트 단위의 최단 답변이 이길 것입니다.
테스트 사례
여기서 테스트 사례는 1- 색인입니다.
n r(n)
-- ------
1 1/1
2 1/2
3 2/1
4 1/3
5 3/2
6 2/3
7 3/1
8 1/4
9 4/3
10 3/5
11 5/2
12 2/5
13 5/3
14 3/4
15 4/1
16 1/5
17 5/4
18 4/7
19 7/3
20 3/8
50 7/12
100 7/19
1000 11/39
True/2
유효한 분수는 아닙니다 (관심있는 한). 따로, True
항상 그런 것은 아닙니다. 1
일부 언어는 -1
비트 연산자를 적용 할 때 잠재적 실수를 피하기 위해 대신 사용 합니다. [인용 필요]
True
에 해당 1
하고 True/2
있을 것이다 1/2
.
True
s 대신 s를 사용할 수 있습니까1
?