使用螺旋方式打印一个上三角矩阵
这是本次蓝点杯考试的一个题目:
使用螺旋打印一个上三角矩阵的方法是这样的,用户输入一个数n,然后使用螺旋填充的方式生成一个上三角矩阵,举例来说
如果用户输入5,则生成如下矩阵:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
下面给出代码:
//l为矩阵的阶void printUpMatrix(int l)
{
int * element = (int *)malloc(l*(l+1)*2);//为所有的数,分配存储空间
memset(element, 0, l*(l+1)*2);
int left;
int index;
int hCount = 1; //哪一行
int vCount = 1;//哪一列
int cCount = 1; //哪一的对角线
int m, n; //m行n列,以0开头
int i, j;
for(i = 0; i < l; i++)
{
left = i%3;
switch(left)
{
case 0: //横的
m = hCount - 1;
n = hCount - 1;
index = ((2*l - m + 1)*m)/2 + n;
for(j = 0; j < l - i; j++)
element[index + j] = ((2*l - i + 1)*i)/2 + j + 1;
hCount++;
break;
case 1: //对角线
m = cCount;
n = l - 2*cCount;
for(j = 0; j < l - i; j++)
{
element[((2*l - m + 1)*m)/2 + n] = ((2*l - i + 1)*i)/2 + j + 1;
m++;
n--;
}
cCount++;
break;
case 2: //竖的
m = l - 2*vCount;
n = vCount - 1;
for(j = 0; j < l - i; j++)
element[((2*l - m + j + 1)*(m-j))/2 + n] = ((2*l - i + 1)*i)/2 + j + 1;
vCount++;
break;
}
}
//输出矩阵
for(i = 0; i < l; i++)
{
for(j = 0; j < l - i; j++)
printf("%-4d", element[((2*l - i+ 1)*i)/2 + j]);
printf("\n");
}
free(element);
}
浙公网安备 33010602011771号