CSP/信奥赛C++语法基础刷题训练(16):洛谷P5731:蛇形方阵
CSP/信奥赛C++语法基础刷题训练(16):洛谷P5731:蛇形方阵
题目描述
给出一个不大于
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。
AC代码
#include<bits/stdc++.h>
using namespace std;
/*思路:
根据题意和样例理解如下:
方向顺序为:右、下、左、上
改变方向的条件为出界或碰到已经填数的格子
*/
int n,a[10][10];
int main(){
cin>>n;
int x=1,y=0;//x代表行,y代表列 (模拟从1,0开始往1,1走)
int k=1;//从1开始填数字
while(k<=n*n){//n*n的格子,最大数字为n方
//往右走
while(y<n && a[x][y+1]==0){
a[x][y+1]=k;
y++; k++;
}
//往下走
while(x<n && a[x+1][y]==0){
a[x+1][y]=k;
x++; k++;
}
//往左走
while(y>1 && a[x][y-1]==0){
a[x][y-1]=k;
y--; k++;
}
//往上走
while(x>1 && a[x-1][y]==0){
a[x-1][y]=k;
x--; k++;
}
}
//输出
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<setw(3)<<a[i][j];//setw用于设置场宽
//printf("%3d",a[i][j])//也可以使用printf
}
cout<<endl;
}
return 0;
}
文末彩蛋:
点击王老师青少年编程主页有更多精彩内容