P5731 【深基5.习6】蛇形方阵

P5731 【深基5.习6】蛇形方阵

题目描述

给出一个不大于 9 的正整数 n,输出n×n 的蛇形方阵。

从左上角填上 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 个字符,前面使用空格补齐。

输入格式

输出格式

输入输出样例

输入 #1复制

4

输出 #1复制

  1  2  3  4
 12 13 14  5
 11 16 15  6
 10  9  8  7

题解

我没有用常规的算法做,而是模拟,像是在玩贪吃蛇,一碰到边或是已填充的就转弯

python

n=eval(input())
matrix = [[0 for j in range(n)] for i in range(n)]
x,y=0,0

towards=['y=y+1','x+=1','y-=1','x-=1']
t=0
for i in range(1,n*n+1):
   matrix[x][y]=i
   exec(towards[t])
   if x>n-1 or y>n-1 or matrix[x][y]!=0:
      exec(towards[(t+2)%4])
      t=(t+1)%4
      exec(towards[t])
for i in (matrix):
   for j in i:
      print(f"{j: >3}",end='')
   print()

c++

同样是模拟,这篇是借鉴大佬改的,用了0的布尔值为否的特性来缩短代码量,相当优雅

#include <iostream>
using namespace std;
int a[15][15];
int main() {
    int n,k=1,x=1,y=0;
    cin>>n;
    while (k<=n*n){
        while(y<n&&!a[x][y+1])a[x][++y]=k++; //→
        while(x<n&&!a[x+1][y])a[++x][y]=k++; //↓
        while(y>1&&!a[x][y-1])a[x][--y]=k++; //←
        while(x>1&&!a[x-1][y])a[--x][y]=k++; //↑
    }
    for (int i=1;i<=n;i++){
        for (int j=1;j<=n;j++)printf("%3d",a[i][j]);
        cout<<endl;
    }
    return 0;
}
上一篇:代码审计命令执行专题


下一篇:postgresql提权