题目描述
给出一个不大于 9 的正整数 n,输出 n×n 的蛇形方阵。
从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。
输入格式
输入一个正整数 n,含义如题所述。
输出格式
输出符合题目要求的蛇形矩阵。
输入输出样例
输入 #1
4
输出 #1
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
说明/提示
数据保证,1≤n≤9。
这道题的目标是输出一个n行n列的蛇形方阵,思路是把向上、向下、向左、向右的四种情况一一列举出来。步骤如下:
1、定义数据
2、输入数据
3、循环判断并构造蛇形方阵
4、循环输出蛇形方阵
总结一下:这道题的关键点就是把向上、向下、向左、向右的四种情况一一列举出来再去构造。
代码如下:
#include <bits/stdc++.h>
using namespace std;
//也可由直接写成num[26][26]
const int maxn=26;
//#define maxn 26 (与第四行意义相同)
int main()
{
//定义变量
int x,y,n,count=1;
//数组初始化为0
int num[maxn][maxn]={};
//输入n
cin >> n;
//确定第一个数的坐标
x=0; y=n-1;
//写入第一个数
num[x][y]=1;
//写入2--n*n
for (;count<n*n;)
{
//上、下、左、右四种情况列举判断
while (x-1>=0 && !num[x-1][y]) num[--x][y]=++count; //向上
while (x+1<n && !num[x+1][y]) num[++x][y]=++count; //向下
while (y-1>=0 && !num[x][y-1]) num[x][--y]=++count; //向左
while (y+1<n && !num[x][y+1]) num[x][++y]=++count; //向右
}
for (x=0;x<n;x++)
{
for (y=0;y<n;y++)
printf("%4d",num[x][y]);
//构造矩阵每输出完一行就得换一次行
printf("\n");
}
return 0;
}
感谢观看,请多多点赞关注,您的点赞和关注是我创作的动力
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)