Description
以下是一个5*5阶螺旋方阵。设计一个程序,输出该形式的n*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
Input
输入一个整数n,(n>=1&&n<=20)
Output
输出对应的n*n阶螺旋方阵。
Sample Input
5
Sample Output
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
HINT
两个数字中间至少留有一个空格!
这是在李春葆老师的《数据结构教程(第四版)》上的一道课后习题 ,实际上可以算是一道水题
仔细判断好每一行或列结束的条件并将数依次写到数组中就可以解决
这道题我是利用switch语句来判断书写到矩阵里的方向(上下左右) 再用while判断当k(写入数组的数值)大于等于最大值时停止
源代码:
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n,k=1,i=0,j=0,d=0;
scanf("%d",&n);
int a[n][n];
memset(a,0,sizeof(int)*n*n);
while(k<=n*n)
{
switch(d)
{
case 0://向右写入数组
do
{
a[i][j++]=k++;
}
while(j<n-i);
j--;
d=1;
break;
case 1://向下写入数组
do
a[++i][j]=k++;
while(i<j);
d=2;
break;
case 2://向左写入数组
do
a[i][--j]=k++;
while(j>=n-i);
d=3;
break;
case 3://向上写入数组
do
a[--i][j]=k++;
while(i>j+1);
k--;
d=0;
break;
}
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}