我打印出一個6x6 1d數組,但想逆時針旋轉左上方的3x3部分。有沒有這樣的算法?在未來,我也想旋轉像右下方的3×3節或右上方的3×3節或左下方的3×3節。如何在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矩陣,您可以這樣做嗎?如果不是這可能是一個好的第一步,學習如何做的最好方法就是在紙上做。當你得到它在紙上工作,然後有一個4×4的矩陣,並做左旋3×3部分與這個小矩陣「旋轉」。當你可以用4x4矩陣完成時,你應該可以將它應用到任何MxN矩陣(其中M> 3和N> 3)。當你可以在紙上做時,試着將算法改進爲簡單的小步驟和離散步驟。最後將這些小步驟轉化爲代碼。 –
你可能不想計算預旋轉和後旋轉索引之間的九個差異數組:'diff [] = {0-1,1-2,2-8,6-0,7-7,.. }'。一旦選擇了要旋轉的子陣列,就可以獲得該子陣列中的索引數組(例如,'ix [] = {'8,'9,10,24,25,26,30,31,32}每個'k'都用'a [k + diff [k]]'交換'a [k]'。 (_somehow_部分意味着它只是一個純粹的想法,而不是解決方案。) – DyZ