面试题20:打印矩阵

来源:互联网 发布:最小公约数算法 编辑:程序博客网 时间:2024/04/30 00:15

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:

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,11,10.



#include <stdio.h>#define MAXSIZE 1000int arr[MAXSIZE][MAXSIZE] = {0};void printMatrix(int m,int n);int row=0;int col=0;int main(){     int i,j; row=4; col=4; int k=1;     for(i=0;i<row; i++) { for(j=0;j<col; j++) { arr[i][j]=k; k++; } } i=0; j=0; while(i<row && j < col) { printMatrix(i,j); //每次打印一圈之后下一次要打印的起始位置为之前的行和列+1 i++; j++; //每次打印一圈之后行和列要减少1 row--; col--; } printf("\n");     return 0;}void printMatrix(int m,int n){//m为当前要打印矩阵的起始行下标,n为当前要打印矩阵的起始列下标    int i=m,j=n;//用i和j进行遍历//从左到右输出该行,i,j的值为起始下标,此过程中i不变,输出当前行,停止条件为j超过要打印的列数col    for( ;j<col;j++){        printf("%d ",arr[i][j]);    }    j--;//越界之后退回当前列//从上到下输出该列,i的值为起始行+1,此过程中j不变,输出当前列,停止条件为i超过要打印的行数row    for(i++;i<row;i++){        printf("%d ",arr[i][j]);    }    i--;//越界之后退回当前行//j回退,从右到左输出该行,停止条件为j超过要打印的起始列数n    for(j--;j>=n;j--){        printf("%d ",arr[i][j]);    }    j++;//i回退,从下到上输出该行,停止条件为i超过要打印的起始行数row    for(i--;i>m;i--){        printf("%d ",arr[i][j]);    }}

来源:http://www.cnblogs.com/xing901022/p/3768582.html

0 0