Mathematica, 50-> 47-> 42 바이트
p = Join[Range[2, #, 2], Range[1, #, 2]] &
온라인으로 사용해보십시오!
Flatten []에 대한 2 가지 최적화 가능성 Join []을 지적하고 순수한 함수를 사용하는 user202729에게 감사드립니다.
두 가지 말을 추가하고 싶습니다.
1) 요청에 따라 n> = 4에 대해 연속적인 하락 또는 상승이없는 특정 순열을 구성하는 것은 매우 간단합니다.
두 개의 연속 된 목록으로 구성됩니다.
n도 짝수입니다 :
list1 = (2,4, ..., n / 2)
list2 = (1,3, ..., n / 2-1)
홀수 n의 경우 :
list1 = (2,4, ..., Floor [n / 2])
list2 = (1,3, ..., Floor [n / 2])
이 "알고리즘"의 경우 단 하나의 결정 (n 짝수 또는 홀수) 만 내려야하며 나머지는 n 개의 숫자 만 적습니다.
가능한 Mathematica 솔루션이 맨 위에 제공됩니다.
2) 관련된 질문은 n의 함수로서 그러한 퍼뮤 테이션이 얼마나 많은가입니다.
매스 매 티카, 124 바이트
a[0] = a[1] = 1; a[2] = a[3] = 0;
a[n_] := a[n] = (n + 1)*a[n - 1] - (n - 2)*a[n - 2] - (n - 5)*a[n - 3] + (n - 3)*a[n - 4]
온라인으로 사용해보십시오!
예:
a[#] & /@ Range[4, 12]
{2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034}
이러한 순열의 수를 세는 것은 표준 문제입니다.
n = 4 인 경우 2 : {{2,4,1,3}, {3,1,4,2}}가 있습니다
n = 5의 경우 14가 있습니다 : {{1,3,5,2,4}, {1,4,2,5,3}, {2,4,1,3,5}, {2,4, 1,5,3}, {2,5,3,1,4}, {3,1,4,2,5}, {3,1,5,2,4}, {3,5,1, 4,2}, {3,5,2,4,1}, {4,1,3,5,2}, {4,2,5,1,3}, {4,2,5,3, 1}, {5,2,4,1,3}, {5,3,1,4,2}}
이 순열의 수 a (n)은 빠르게 증가합니다. 2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034, ...
큰 n의 경우 비율 a (n) / n! 한계 1 / e ^ 2 = 0.135335에 도달 한 것 같습니다 ... 엄격한 증거는 없지만 수치 적 증거로 추측 할 수 있습니다. 프로그램을 온라인으로 실행하여이를 테스트 할 수 있습니다.
위의 프로그램 (아래 주어진 기준에 따라)은이 숫자를 계산합니다.
OEIS : A002464 에서 관련 시퀀스에서 자세한 정보를 찾을 수 있습니다 . Hertzsprung의 문제 : n x n 보드에 n 개의 비 공격 왕을 배치하는 방법, 각 행과 열에 1이 있습니다. 또한 연속적인 증가 또는 감소없이 길이 n의 순열 수입니다.