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