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在内的多家公司在面试或者笔试里采用过这道题。

  1. #include <stdio.h>    
  2.    
  3. int main(char **argv,int argc)    
  4. {    
  5.     int m=4,n=4;  
  6.     int i=0,j=0;  
  7.    
  8.     int s[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};  
  9.     int res[4*5]={0},num=0,p=0,r=0,hui,l=0;  //l表示内矩阵的边长  
  10.     int dir;  
  11.     int d[4][2]={{0,1},{1,0},{0,-1},{-1,0}};  
  12.     l=m;  
  13.     hui=m/2+m%2;  
  14.    
  15.     while(i<hui)  
  16.     {  
  17.         for(dir=0;dir<m;dir++)      //循环四个方向  
  18.         {  
  19.             for(num=0;num<l;num++)  //遍历每个方向上的所有元素,但矩阵的边长的缩短  
  20.             {  
  21.                 res[r]=s[i][j];  
  22.                 i=i+d[dir][0];  
  23.                 j=j+d[dir][1];  
  24.                 r++;  
  25.             }  
  26.             i=i-d[dir][0];     //i,j,r的值加过了,再退回去  
  27.             j=j-d[dir][1];  
  28.             r--;  
  29.         }  
  30.         i++;      //准备进入内矩阵  
  31.         j++;  
  32.         l=l-2;   //算出内矩阵的边长  
  33.     }  
  34.     printf("r=%d\n",r);  
  35.     for(p=0;p<r;p++)  
  36.         printf("%d\n",res[p]);  
  37.  
  38.     return 0;    
  39. }