题目1391:顺时针打印矩阵
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2746
解决:758
-
题目描述:
-
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
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 41 2 3 45 6 7 89 10 11 1213 14 15 16
-
样例输出:
-
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
-
#include<cstdio> void clockwisePrint(int **arr,int m,int n) { int i,j; int start=0; while(m>start*2&&n>start*2) { int endX=n-1-start; int endY=m-1-start; //从左到右 for(i=start;i<=endX;i++) printf("%d ",arr[start][i]); //从上到下 for(i=start+1;i<=endY;i++) printf("%d ",arr[i][endX]); //从右到左 if(start<endX&&start<endY) for(i=endX-1;i>=start;i--) printf("%d ",arr[endY][i]); //从下到上 if(start<endX&&start<endY-1) for(i=endY-1;i>start;i--) printf("%d ",arr[i][start]); ++start; } printf("\n"); } //void printArr(int **arr,int m,int n) //{ // int i,j; // for(i=0;i<m;i++) // for(i=0;i<n;j++) // printf("%d ",arr[i][j]); // printf("\n"); //} int main() { int m,n; int i,j; while(scanf("%d%d",&m,&n)!=EOF) { int **arr=new int*[m]; for(i=0;i<m;i++) { arr[i]=new int[n]; for(j=0;j<n;j++) scanf("%d",&arr[i][j]); } clockwisePrint(arr, m, n);//arr代表0行首地址,arr[0]为零行零列元素arr[0][0]地址 //printArr(arr, m,n); for(int i = 0; i < m; i++) delete []arr[i]; delete []arr; } return 0; } /************************************************************** Problem: 1391 User: road Language: C++ Result: Accepted Time:520 ms Memory:1024 kb ****************************************************************/