1044: 数圈
时间限制: 1 Sec 内存限制: 128 MB提交: 205 解决: 78
[ 提交][ 状态][ 讨论版]
题目描述
以1为中心,用2,3,4, ..., n, ..., n*n的数字围绕着中心输出数圈, 如若n=4,则
7 8 9 10
6 1 2 11
5 4 3 12
16 15 14 13
输入
一个整数n(1<=n<=10)
输出
数圈矩阵
样例输入
5
样例输出
21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 1217 16 15 14 13
我觉得这个就是可读性会比较强吧ps:我师父写的,我写的拿不出手...(主要是小对象就要来了不想再自个写了)
#include<iostream> using namespace std; enum Action{Up,Down,Left,Right}; int main() { int n; cin>>n; int table[n+2][n+2]; for(int i=0;i<=n+1;i++) for(int j=0;j<=n+1;j++) { if(i==0||j==0||i==n+1||j==n+1) table[i][j]=-1; else table[i][j]=0; } int x,y; Action act; if(n%2==1) { act=Left; x=1, y=n; } else if(n%2==0) { act=Right; x=n; y=1; } int fill=n*n; while(true) { table[x][y]=fill; fill--; if(fill==0) break; if(act==Left) { if(table[x-1][y]!=0) { act=Down; y--; } else x--; } else if(act==Right) { if(table[x+1][y]!=0) { act=Up; y++; } else x++; } else if(act==Up) { if(table[x][y+1]!=0) { act=Left; x--; } else y++; } else if(act=Down) { if(table[x][y-1]!=0) { act=Right; x++; } else y--; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cout<<table[i][j]; if(j!=n) cout<<' '; } cout<<endl; } return 0; }