[PTA]实验7-2-9 螺旋方阵

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PTA]实验7-2-9 螺旋方阵相关的知识,希望对你有一定的参考价值。

所谓“螺旋方阵”,是指对任意给定的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
  • 提交结果:

在这里插入图片描述

  • 源码:
#include<stdio.h>
int main(void)
{
	int N;
	int matrix[10][10] = { 0 };

	scanf("%d", &N);

	// 上边界、右边界、下边界、左边界的值
	int upBorder, rightBorder, downBorder, leftBorder;
	// 初始化
	upBorder = leftBorder = 0;
	rightBorder = downBorder = N - 1;

	// 行列下标
	int row = 0;
	int col = 0;
	int number = 1;

	while (number <= N * N)
	{
		// 上边框元素,从左往右,行标不变,列标递增到rightBorder
		for (col; col <= rightBorder; col++)
		{
			matrix[row][col] = number;
			number++;
		}
		// 执行完后col = rightBorder + 1,需减1
		col--;

		// 右边框元素,从上往下,列标不变,行标递增到downBorder
		for (row++; row <= downBorder; row++)
		{
			matrix[row][col] = number;
			number++;
		}
		// 执行完后row = downBorder + 1,需减1
		row--;

		// 下边框元素,从右往左,行标不变,列标递减到leftBorder
		for (col--; col >= leftBorder; col--)
		{
			matrix[row][col] = number;
			number++;
		}
		// 执行完后col = leftBorder - 1,需加1
		col++;

		// 左边框元素,从小往上,列标不变,行标递减到upBorder
		for (row--; row > upBorder; row--)
		{
			matrix[row][col] = number;
			number++;
		}
		
		// 移动到下一层的第一个元素
		row++;
		col++; 
		// 右、下边界减1;左、上边界增1
		rightBorder--;
		downBorder--;
		leftBorder++;
		upBorder++;
	}

	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			printf("%3d", matrix[i][j]);
		}

		printf("\\n");
	}
}

以上是关于[PTA]实验7-2-9 螺旋方阵的主要内容,如果未能解决你的问题,请参考以下文章

[PTA]实验7-2-7 方阵循环右移

内螺旋方阵 spiral

1807: 基础螺旋方阵

c_cpp 走过一个螺旋形的方阵

[PTA]实验7-2-8 找鞍点

[PTA]实验7-2-2 矩阵运算