2898: 【例63.1】 蛇形填数
内存限制:64 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:4
解决:3
题目描述
在$n×n$方阵里填入$1$,$2$,$3$,... ,$n × n$,要求填成蛇形。例如$n=4$时方阵为:
其中,$n\le 20$。
10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4
其中,$n\le 20$。
输入
输入$n$。
输出
输出题述方阵。$n$行,每行各数之间用一个空格隔开。
样例输入 复制
4
样例输出 复制
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
提示
#include<bits/stdc++.h> using namespace std; int dir[4][2]={{1,0},{0,-1},{-1,0},{0,1}};//方向数组 int a[25][25]; int main(){ int k=1,n,fx,fy,d = 0,x,y;//fx,fy 当前焦点位置 x, y 下一个位置 d:方向 cin>>n; fx=1,fy=n; while(k<=n*n){ a[fx][fy]=k++;//赋值 x=fx+dir[d][0],y=fy+dir[d][1]; //下一个位置 if(a[x][y] != 0 || x>n|| x<1 || y>n || y<1) //如果新位置上已经有值了或移出了二维数组范围 d=(d + 1) % 4; //变换方向 fx += dir[d][0],fy += dir[d][1]; //更新焦点位置 } for(int i=1;i<=n;++i){ for(int j=1;j<=n;++j) cout<<a[i][j]<<' '; cout << endl; } return 0; }