關於迴旋矩陣的幾點思考 (陣列 不使用陣列)

2021-06-21 16:08:47 字數 1975 閱讀 2685

關於迴旋矩陣的幾點思考

(陣列-不使用陣列)

某日,友人出題,要求 n*n的迴旋矩陣的輸出。

迴旋矩陣,顧名思義,就是從外圈數字由大到小旋轉到內圈的n階矩陣

例如 :

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

便是乙個5*5的迴旋矩陣。

對於這類問題,首先想到的是通過陣列進行輸出,現在陣列中對各個位置的數進行排列,再由for迴圈對陣列進行輸出操作。如此思路清晰,**明了,也不易出錯。

#include

#define n

16//

在此定義

矩陣的大小

intmain(

intargc,

const

char

* argv) ;

inti ,j ,x ,y ,m =

0;          //左

x 右y

//計算部分

for( x =

0; x < n/

2; x++)

for( i = x ; i < y  ; i++)

if( m == n*

n)

for( i = x ; i < y ; i++ )

if( m == n * n)

for( j = y  ; j > x ; j-- )

if( m == n * n)

for( j = y  ; j > x  ; j-- )

}

if(  n %

2!= 0)

//列印部分

for(i =

0; i < n ; i++)

printf(

"\n\n");

} return0;

}此處使用巨集定義定義階層n的值,算是偷了一點懶,若需手動錄入n的大小,可以先建乙個100*100的二位陣列(10*10)也可,再將讀入的數的值賦值給n,**幾乎相同,此處不再贅述。

此處思路是大環套小環的「巢狀」思路,即由外圈向內,逐圈進行計算,得益於陣列可以先計算再輸出的所謂優點,可以先計算出每一圈各個位置的每個數之後,再進行整體的輸出。這裡的方法更將每一環切分為4小段,再對每一段上的每乙個數進行填充。其中n為奇數時因為for迴圈判斷的機制,所以出現了乙個bug,導致最中心的數無法進行填充,最後通過特殊法對n進行判斷,填充了中心的缺口。最後以二重for迴圈對二維陣列進行列印輸出。

這裡的方法並不是非常的好,大家肯定有更好的辦法。那麼能不能不用陣列呢?辦法是有的。

#include

#include

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

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

using

namespace

std;

intmatrix(

inti,

intj,

intn);

intmain(

intargc,

const

char

* argv)

cout

<<

endl

<<

endl;

} return0;

}int

matrix(

inti,

intj,

intn)

關於函式的幾點思考

函式思考 1 函式不一定要有返回值。有返回值型別的函式要return就必須return乙個值,否則報錯,也可以不寫return 會警告不會報錯。空型別函式不能return 乙個值,否則報錯,可以有return,表示函式結束,無警告不報錯。2 函式結束標誌 return 3 是否需要返回值看函式的功能...

關於平台的幾點思考

如何進行平台優化?1 管理層面 資源統一管理 復用,制定規範 規範 文件規範 sop操作規範 業務解耦,完善監控,職責分明,問題追蹤,定期會議總結,機房冗餘 2 業務層面 技術解決效能問題 2.1尋找平台短板 壓力測試定位系統短板 qps tps 響應時延等資料,關注系統的cpu 記憶體 io 網路...

關於VI的幾點思考

根據公司工作安排,開始做安全加固方面的錄影,對linux我是一知半解,在較短的時間中完成任務,確實有些難度,不過好在有很多懂linux或者unix的朋友,不懂的地方可以問他們,個人就使用過程的一些感受談幾點 1 多看幫助檔案,在linux中很多命令都有幫助檔案。學習幫助檔案就基本能夠搞定。2 vi是...