標籤:

順時針列印矩陣

順時針列印矩陣

輸入一個矩陣,按照從外向里以順時針的順序依次列印出每個數字。

思路:就是一圈一圈的列印,列印結束的條件是:行號 大於 2倍的最後一圈的起始坐標。

依次從左到右,從上到下,從右到左,從下到上。

注意二維數組傳參是個坑

參考代碼:

root@gt:/home/git/Code# ./a.out 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 root@gt:/home/git/Code# cat printMatrix.c #include <stdio.h>void core(int (*matrix)[4],int rows,int cols,int start){ //建立直角坐標系,橫軸X,縱軸Y int X = cols - 1; int Y = rows - 1; //左 -> 右 for(int i = start;i <= X - start;++i) { int num = matrix[start][i]; printf("%d ",num); } printf("
"); //上 -> 下 if(start < Y) { for(int i = start + 1;i <= Y - start;++i) { int num = matrix[i][X - start]; printf("%d ",num); } } //右 --> 左 printf("
"); if(start < Y && start < X) { for(int i = X - 1 -start;i >= start;--i) { int num = matrix[Y - start][i]; printf("%d ",num); } } //下 --> 上 printf("
"); if(start < Y - 1 && start < X) { for(int i = Y - 1 - start;i > start;--i) { int num = matrix[i][start]; printf("%d ",num); } } printf("
");}void printMatrix(int (*matrix)[4],int rows,int cols){ if(matrix == NULL || rows <= 0 || cols <= 0) return; int start = 0; while(cols > 2 * start && rows > 2 * start) { core(matrix,rows,cols,start); ++start; }}int main(){ int matrix[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; //參數是2維數字是個坑,這裡需要優化 printMatrix(matrix,4,4); return 0;}

推薦閱讀:

旋轉數組的最小數字
棧和隊列
快速排序
基數排序
從尾到頭列印鏈表

TAG:演算法 | 筆試 |