【深基5.习6】蛇形方阵
题目描述
给出一个不大于
9
9
9 的正整数
n
n
n,输出
n
×
n
n\times n
n×n
的蛇形方阵。
从左上角填上 1 1 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 3 3 个字符,前面使用空格补齐。
输入格式
输入一个正整数 n n n,含义如题所述。
输出格式
输出符合题目要求的蛇形矩阵。
样例 #1
样例输入 #1
4
样例输出 #1
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
提示
数据保证, 1 ≤ n ≤ 9 1 \leq n \leq 9 1≤n≤9。
题解
题意:按照一定顺序赋值一个数组并且输出
思路:
- 通过观察可以得出这个赋值的顺序是右下左上
- 转弯的条件有两种:(1)到达数组的边界(2)下一个位置已经被赋值过了
代码解释
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[10][10]{0};
int geshu=0;
int x=0,y=-1;
bool pd=1; //用于判断是否继续循环
while(pd)
{
pd=0; //默认这一次循环之后就不用循环了,除非发现还有地方没有赋值到
while(y<n-1&&a[x][y+1]==0) //"y<n-1"表示数组边界,"a[x][y+1]==0"用于判断下一个位置是否已经被赋值
{
y++;
geshu++;
a[x][y]=geshu;
pd=1; //发现还有地方没有赋值到
}
while(x<n-1&&a[x+1][y]==0)
{
x++;
geshu++;
a[x][y]=geshu;
pd=1;
}
while(y>0&&a[x][y-1]==0)
{
y--;
geshu++;
a[x][y]=geshu;
pd=1;
}
while(x>0&&a[x-1][y]==0)
{
x--;
geshu++;
a[x][y]=geshu;
pd=1;
}
}
for(int i=0;i<n;++i)
{
for(int j=0;j<n;++j)
printf("%3d",a[i][j]); //按照一定的格式输出
cout<<endl;
}
return 0;
}