笔试题目:顺时针打印矩阵

笔试的一道题目,笔试的时候还是差一点,但是大体思路是正确的:

1.根据输入的行与列确定该矩阵由多少个矩形组成矩形层数level=( n>m? n:m)/2得出。

2.每一层矩形,按顺时针方向设置组成矩形的值

3.打印

重点:1.动态定义数组

 

[plain][/plain] view plaincopy

  1. <pre name=”code” class=”plain”>//开辟内存空间动态建立二维数组。
  2.     matrix=(int **)calloc(n,sizeof(int *));
  3.     for(i=0;i<n;i++)
  4.     {
  5.         matrix[i]=(int *)calloc(m,sizeof(int));
  6.     }</pre><br>

2.当前层数包含的值的范围以及矩形四条边包含的值的范围的划分。

 

[plain][/plain] view plaincopy

  1. rectLength=(m-i*2);
  2.         rectWidth=(n-i*2);
  3.         right=rectLength+rectWidth-1;
  4.         bottom=rectLength+rectWidth-1+rectLength-2;
  5.         left=(rectLength+rectWidth-2)*2;

 

 

 

[plain][/plain] view plaincopy

  1. #include<stdlib.h>
  2. void show(int m,int n) //m =chang n=kuang
  3. {
  4.     int **matrix;
  5.     int i,j;//i为当前层,j为当前矩形的当前位置
  6.     int rectLength,rectWidth;//矩形的长和宽
  7.     int level;
  8.     int sum=0;
  9.     int topL,rightL,bottomL,leftL,right,bottom,left;
  10.     if(!n || !m)
  11.         return ;
  12.     //开辟内存空间动态建立二维数组。
  13.     matrix=(int **)calloc(n,sizeof(int *));
  14.     for(i=0;i<n;i++)
  15.     {
  16.         matrix[i]=(int *)calloc(m,sizeof(int));
  17.     }
  18.     level=n>m ?n:m;
  19.     level=level/2; //矩形层数
  20.     sum=1;
  21.     for(i=0;i<=level;i++)  //修改每一层矩形的内容
  22.     {
  23.         rectLength=(m-i*2);
  24.         rectWidth=(n-i*2);
  25.         right=rectLength+rectWidth-1;
  26.         bottom=rectLength+rectWidth-1+rectLength-2;
  27.         left=(rectLength+rectWidth-2)*2;
  28.         for(j=1;j<= left;j++) //
  29.         {
  30.             if(j<=rectLength) //上边
  31.             {
  32.                 matrix[i][j-1+i]=sum++;
  33.                 continue;
  34.             }
  35.             else if(j > rectLength && j<=right) //右边
  36.             {
  37.                 matrix[j-rectLength+i][m-i-1]=sum++;
  38.                 continue;
  39.             }
  40.             else if( j >right && j<= bottom) //下边
  41.             {
  42.                 matrix[n-i-1][bottom-j+1+i]=sum++;
  43.                 continue;
  44.             }
  45.             else if( j > bottom && j<= left ) //左边
  46.             {
  47.                 matrix[left-j+1+i][i] =sum++;
  48.                 continue;
  49.             }
  50.             if(sum > n*m -1)
  51.                 break;
  52.         }
  53.     }
  54.     for(i=0;i<n;i++)
  55.     {
  56.         printf(“\n”);
  57.         for(j=0;j<m;j++)
  58.             printf(“%4d”,matrix[i][j]);
  59.     }
  60.     printf(“\n”);
  61. }
  62. void main()
  63. {
  64.     int i,j;
  65.     printf(“please input length and width “);
  66.     scanf(“%d %d”,&i,&j);
  67.     show(i,j);
  68. }

 

 

标签