1. 顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
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。
分析:包括Autodesk、EMC在内的多家公司在面试或者笔试里采用过这道题。
- #include <stdio.h>
- int main(char **argv,int argc)
- {
- int m=4,n=4;
- int i=0,j=0;
- int s[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
- int res[4*5]={0},num=0,p=0,r=0,hui,l=0; //l表示内矩阵的边长
- int dir;
- int d[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
- l=m;
- hui=m/2+m%2;
- while(i<hui)
- {
- for(dir=0;dir<m;dir++) //循环四个方向
- {
- for(num=0;num<l;num++) //遍历每个方向上的所有元素,但矩阵的边长的缩短
- {
- res[r]=s[i][j];
- i=i+d[dir][0];
- j=j+d[dir][1];
- r++;
- }
- i=i-d[dir][0]; //i,j,r的值加过了,再退回去
- j=j-d[dir][1];
- r--;
- }
- i++; //准备进入内矩阵
- j++;
- l=l-2; //算出内矩阵的边长
- }
- printf("r=%d\n",r);
- for(p=0;p<r;p++)
- printf("%d\n",res[p]);
- return 0;
- }
转载于:https://blog.51cto.com/liangbing8612/687135