- 题目描述:
-
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
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.
- 输入:
-
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列。
接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1<=a<=10000)。
- 输出:
-
对应每个测试案例,输出一行,
按照从外向里以顺时针的顺序依次打印出每一个数字,每个数字后面都有一个空格。
- 样例输入:
-
4 4 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
Code:#include <cstdio> using namespace std; int arr[1010][1010]; void printMatrixInCircle(int rows,int columns,int start){ int endX=rows-1-start; int endY=columns-1-start; for(int i=start;i<=endY;++i) printf("%d ",arr[start][i]); if(start<endX){ for(int i=start+1;i<=endX;++i) printf("%d ",arr[i][endY]); } if(start<endX&&start<endY){ for(int i=endY-1;i>=start;--i) printf("%d ",arr[endX][i]); } if(start<endX-1&&start<endY){ for(int i=endX-1;i>start;--i) printf("%d ",arr[i][start]); } } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF){ for(int i=0;i<n;++i) for(int j=0;j<m;++j) scanf("%d",&arr[i][j]); int start=0; int rows=n; int columns=m; while(rows>start*2&&columns>start*2){ printMatrixInCircle(rows,columns,start); ++start; } printf(" "); } return 0; } /************************************************************** Problem: 1391 User: lcyvino Language: C++ Result: Accepted Time:520 ms Memory:5504 kb ****************************************************************/