1044: 数圈

    xiaoxiao2024-04-18  5

    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 12

    17 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; }

    转载请注明原文地址: https://ju.6miu.com/read-1288097.html
    最新回复(0)