順時針迴圈增長的陣列

2021-06-22 07:29:35 字數 1059 閱讀 9826

問題描述: /*

*input n, print the cube.

*in the example, n = 5

*1 2 3 4 5

*16 17 18 19 6

*15 24 25 20 7

*14 23 22 21 8

*13 12 11 10 9

*/最容易想到思路的就是,建立乙個陣列,然後順時針螺旋遞增,下面是該思路實現的**。

#include

#include

#define n 10 

int m[n][n];

void main()

for(i=0;i

cout<}

還有效率更高的解嗎?能不能直接根據元素的座標計算它的值呢?答案是可以的。

其實,每一層螺旋都重複了同樣的規律,只是內層螺旋都加上了外層螺旋的終值。如果能推導出每層螺旋終值的通項,那麼也就能根據當前元素的位置計算其值。

把最外層螺旋記為第0層,往內推進一層,層數加1,元素(i,j)的層數layer是(i,j,n-i-1,n-j-1)中的最小值。

第layer層螺旋的路徑長度為4*(n-layer*2)-4,那麼該層的螺旋終值就是所有層數不大於layer的螺旋路徑長度之和,根據等差數列求和公式,每層螺旋終值的通項為(4*n-4*layer-4)*(layer+1)。

在計算第layer層元素的值時,我們需要第layer-1層的螺旋終值作為初始值,記為init。那麼init=(4*n-4*layer)*layer。接下來根據元素所處螺旋層的位置(上邊,右邊,下邊,左邊)來計算元素的值,記得加上外層螺旋的終值就行了。

下面是**實現。

#include

#include

#define min(a,b)  (((a)>(b))?(b):(a))

void main()

else if(layer==n-j-1)

else if(layer==n-i-1)

else if(layer==j)

printf("%-5d",res);

}cout<}

cout<

順時針 逆時針

大多時候,我看到舞者在順時針飛揚著。閉上眼,思緒定一定後,腦海裡想著逆時針旋轉,再會看到時,舞者真的會逆時針旋轉,大概13秒左右,我又會看到舞者順時針旋轉。隨後,就會想怎麼轉就怎麼轉,有概率,分析者認為 順時針轉的話 屬於是用右腦較多的型別 逆時針轉屬於使用左腦較多的型別 逆時針轉動的 突然變成順時...

順時針列印陣列

面試題20 順時針列印矩陣 題目 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。例如如果輸入如下矩陣 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 依次列印出數字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,1,10 我的 如下 ...

陣列矩陣的順時針輸出

其實這個題目,我要講的並不是這個題目的編碼過程,而是對於這個問題解決過程 我們不能遇到這個問題之後立即編碼是錯誤的,然而立即拿出筆在紙上寫寫畫畫時,也是需要進行技巧的,針對這個問題,我們首先看看順時針時,走一圈作為乙個迴圈,然而該 迴圈的起點是很有意思的,這個點的所在的點行座標和列座標是相同的 也即...