[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 螺旋方阵的主要内容,如果未能解决你的问题,请参考以下文章