PTA是浙江大学设计类实验辅助教学平台。
题目描述:
所谓“螺旋方阵”,是指对任意给定的 N,将1到 N × N 的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入 N × N 的方阵里。本题要求构造这样的螺旋方阵。
输入格式:
输入在一行中给出一个正整数N(<10)。
输出格式:
输出N × N的螺旋方阵。每行 N 个数字,每个数字占3位。
输入样例:
5
输出样例:
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
编译器
C(gcc)
提交代码
#include <stdio.h>
#define SIZE 10
enum{left,right,up,down};
int main(void) {
int n;
int matrix[SIZE][SIZE];
scanf("%d", &n);
int x = 0, y = 0;//坐标
int k = 1;//循环数1~n*n
int corner_right=n-1,corner_down=n-1,corner_left=0,corner_up=1;//右下左上个方向的墙壁会向中间缩拢
int direction = right;
while(k<=n*n){
switch (direction)
{
case right:
matrix[x][y++] = k++;
if (y == corner_right) //向右走,碰到拐角就向下
{
direction = down;
corner_right--;
}
break;
case down:
matrix[x++][y] = k++;
if (x == corner_down) //向下走,碰到拐角就向左
{
direction = left;
corner_down--;
}
break;
case left:
matrix[x][y--] = k++;
if (y == corner_left) //向左走,碰到拐角就向上
{
direction = up;
corner_left++;
}
break;
case up:
matrix[x--][y] = k++;
if (x == corner_up) //向上走,碰到拐角就向右
{
direction = right;
corner_up++;
}
break;
default:
break;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf(" %2d",matrix[i][j]);
}
printf("n");
}
}