02:螺旋矩阵
-
时间限制:
- 1500ms
- 1000kB
-
描述
- 生成一个NxN(N>0)的旋转矩阵,N从键盘输入,每4个字符输出一个数字,右对齐,从1开始至NxN,顺时针成螺旋状,例如:输入4则生成1--16的矩阵. 输入
- 5 (N) 输出
-
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
(由于排版有问题,详看样例) -
源码(OpenJudge通过)
#include <stdio.h>
#include <stdlib.h>
int luoxuan(int **a ,int k,int row ,int col, int n)
{
int i;
for(i=row;i<n;i++,k++)
a[row][i]=k;
for(i=col+1;i<n;i++,k++)
a[i][n-1]=k;
for(i=n-2;i>=col;i--,k++)
a[n-1][i]=k;
for(i=n-2;i>row;i--,k++)
a[i][col]=k;
return k;
}
int main ()
{
int i,r,c,k,m,n;
scanf("%d",&n);
int **a=(int**)malloc(sizeof(int*)*n);
for(i=0;i<n;i++)
a[i]=(int*)malloc(sizeof(int)*n);
k=1;
r=0;
c=0;
m=n;
while(m>n/2)
{
k=luoxuan(a,k,r,c,m);
r++;
c++;
m--;
}
for(i=0;i<n;i++)
{
for(k=0;k<n;k++)
printf("M",a[i][k]);
printf("\n");
}
}
结果截图