北电笔试的一个改错题。
打印如下矩阵:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
直接把正确程序贴上来吧。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
void PrintMatrix(int *matrix,int size)
{
// output the matrix
int i;
for(i=0;i<size;i++)
{ int j;
for( j=0;j<size;j++)
{
printf("%4d",matrix[i*size+j]);
}
printf("\n");
}
return;
}
void FillMatrix(int *matrix,int size)
{
int upperBound,lowerBound;
int index1=0,index2=0;
int direction=1;
int number=1;
int dimensionFlag=0;
upperBound=size;
lowerBound=0;
while(upperBound>=lowerBound)
{
int i;
for( i=0;i<4;i++)
{
int j;
for( j=lowerBound;j<upperBound;j++)
{
matrix[index1*size+index2]=number;
number++;
if(j==upperBound-1)
{
dimensionFlag=!dimensionFlag;
if(i%2==1)
{
direction=-direction;
}
}
if(dimensionFlag)
index1+=direction;
else
index2+=direction;
}
if(i%2==0)
{
if(i%4==0)
{
lowerBound++;
}
else
{
upperBound--;
}
}
}
}
return;
}
int main()
{
int MATRIX_SIZE=5;
int *matrix;
matrix=(int *)malloc(sizeof(int)*MATRIX_SIZE*MATRIX_SIZE);
FillMatrix(matrix,MATRIX_SIZE);
PrintMatrix(matrix,MATRIX_SIZE);
return 0;
}
i从0到3对应4个方向,
针对每个方向有dimensionFlag,directrion标识index1,index2该如何前进。
lowerBound,upperBound表明每行或者每列未填充的矩阵元素上下边界。
没有评论:
发表评论