给出一个不大于 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
我没有用常规的算法做,而是模拟,像是在玩贪吃蛇,一碰到边或是已填充的就转弯
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()
同样是模拟,这篇是借鉴大佬改的,用了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; }