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

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

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);
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值