關於迴旋矩陣的幾點思考
(陣列-不使用陣列)
某日,友人出題,要求 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是...