6x6 1d 배열을 인쇄했지만 왼쪽 상단의 3x3 섹션을 반 시계 방향으로 회전하고 싶습니다. 이 알고리즘이 있나요? 앞으로도 오른쪽 하단 3x3 섹션이나 오른쪽 상단 3x3 섹션 또는 하단 왼쪽 3x3 섹션처럼 회전하고 싶습니다.C에서 1d 배열의 섹션을 회전하는 방법은 무엇입니까?
a[0] a[1] a[2] a[3] a[4] a[5] a[1] a[2] a[8] a[3] a[4] a[5]
a[6] a[7] a[8] a[9] a[10] a[11] a[0] a[7] a[14] a[9] a[10] a[11]
a[12] a[13] a[14] a[15] a[16] a[17] ---> a[6] a[12] a[13] a[18] a[19] a[20]
a[18] a[19] a[20] a[21] a[22] a[23] a[18] a[19] a[20] a[21] a[22] a[23]
a[24] a[25] a[26] a[27] a[28] a[29] a[24] a[25] a[26] a[27] a[28] a[29]
a[30] a[31] a[32] a[33] a[34] a[35] a[30] a[31] a[32] a[33] a[34] a[35]
중간 항목이 이동하지 않기 때문에 3x3은 특별한 경우입니다. 4x4 사건에서 일어날 일을 우리에게 보여줄 수 있습니까? –
왼쪽 상단의 3x3 행렬 인 경우에만 수행 할 수 있습니까? 그렇지 않으면 좋은 첫 걸음이 될 수 있으며이를 수행하는 방법을 배우는 가장 좋은 방법은 종이에서하는 것입니다. 논문 작업을 할 때 4x4 행렬을 가지고, 그 작은 행렬로 왼쪽 상단 3x3 부분에 "회전"을하십시오. 4x4 행렬로 할 수 있다면 MxN 행렬 (M> 3 및 N> 3)에 적용 할 수 있어야합니다. 당신이 종이에 그것을 할 수있을 때 간단하고 작은 이산 단계에 산법을 세련하는 것을 시도하십시오. 마지막으로 이러한 작은 단계를 코드로 변환합니다. –
사전 회전 인덱스와 사후 회전 인덱스 사이의 9 가지 차이점의 배열을 반올림 계산할 수 있습니다 : diff [] = {0-1,1-2,2-8,6-0,7-7, .. }}. 회전 할 하위 배열을 선택했으면 해당 하위 배열의 인덱스 배열을 가져옵니다 (예 : 하위 배열에 대해'ix [] = {'8,'9,1024252630,31,32} 왼쪽 코너)와 각각의'k '에 대해'a [k + diff [k]]'로'a [k]'를 교환합니다. _somehow_ 부분은 솔루션이 아니라 원시 아이디어 일 뿐이라는 것을 의미합니다. – DyZ