f=>{var s="[";for(int i=0;i<n*n-1;)s+=i%-~n<1|i++%~-n<1?i+",":"";return s+n*n+"]";}
온라인으로 사용해보십시오!
여기에서의 변화는 찾을 숫자 사이의 변화에 기초합니다. 0에서 시작하는 2 개 교대는 n-1
하고 n+1
, 그래서 만약 n=5
에 대한 번호 n-1
것 0,4,8,12,16,20
와 대한이 n+1
될 것이다 0,6,12,18,24
. 이것들을 결합하고 (0 인덱싱 대신) 1 인덱싱을 제공합니다 1,5,7,9,13,17,19,21,25
. 의 오프셋n
비트 부정 (비트 보수 연산)하여 실현 ~-n==n-1
및 -~n==n+1
.
구 버전
f=>{var s="[";for(int i=0;i<n*n-1;i++)s+=(i/n!=i%n&&n-1-i/n!=i%n?"":i+1+",");return s+$"{n*n}]";}
온라인으로 사용해보십시오!
이 방법은 숫자가 대각선에 있는지 확인하기 위해 열 및 행 인덱스를 사용합니다. i/n
행 인덱스를 i%n
제공하고 열 인덱스를 제공합니다.
숫자 형 배열 만 반환
숫자 배열 만 구성하는 것이 바이트 비용을 계산하는 것으로 간주되면 Dennis.Verweij의 제안에 따라 다음을 수행 할 수 있습니다 ( using System.Linq;
추가 18 바이트 추가).
C # (. NET 코어) , 66 + 18 = 84 바이트
x=>Enumerable.Range(1,x*x).Where(v=>~-v%~-x<1|~-v%-~x<1).ToArray()
온라인으로 사용해보십시오!