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

来源:互联网 发布:网络上有重名怎么办 编辑:程序博客网 时间:2024/05/17 01:24

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

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

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

3.打印

重点:1.动态定义数组

//开辟内存空间动态建立二维数组。matrix=(int **)calloc(n,sizeof(int *));for(i=0;i<n;i++){matrix[i]=(int *)calloc(m,sizeof(int));}

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

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


#include<stdlib.h>void show(int m,int n) //m =chang n=kuang{int **matrix;int i,j;//i为当前层,j为当前矩形的当前位置int rectLength,rectWidth;//矩形的长和宽int level;int sum=0;int topL,rightL,bottomL,leftL,right,bottom,left;if(!n || !m)return ;//开辟内存空间动态建立二维数组。matrix=(int **)calloc(n,sizeof(int *));for(i=0;i<n;i++){matrix[i]=(int *)calloc(m,sizeof(int));}level=n>m ?n:m;level=level/2; //矩形层数sum=1;for(i=0;i<=level;i++)  //修改每一层矩形的内容{rectLength=(m-i*2);rectWidth=(n-i*2);right=rectLength+rectWidth-1;bottom=rectLength+rectWidth-1+rectLength-2;left=(rectLength+rectWidth-2)*2;for(j=1;j<= left;j++) //{if(j<=rectLength) //上边{matrix[i][j-1+i]=sum++;continue;}else if(j > rectLength && j<=right) //右边{matrix[j-rectLength+i][m-i-1]=sum++;continue;}else if( j >right && j<= bottom) //下边{matrix[n-i-1][bottom-j+1+i]=sum++;continue;}else if( j > bottom && j<= left ) //左边{matrix[left-j+1+i][i] =sum++;continue;}if(sum > n*m -1)break;}}for(i=0;i<n;i++){printf("\n");for(j=0;j<m;j++)printf("%4d",matrix[i][j]);}printf("\n");}void main(){int i,j;printf("please input length and width ");scanf("%d %d",&i,&j);show(i,j);}




原创粉丝点击