之前因为家里的原因,回乡下一个星期,期间都没有机会,也没有心情写代码,一个星期就这么毫无长进,罪过。
看到一个蛇形填数的题目,搞了搞,代码如下
#include <stdio.h> #include <stdlib.h> void print(int **a, int n) { for (int y=0; y<n; y++) { for (int x=0; x<n; x++) { printf("%dt", a[x][y]); } printf("n"); } printf("n"); } void clear(int **a, int n) { for (int y=0; y<n; y++) { for (int x=0; x<n; x++) { a[x][y] = 0; } } } void fill(int **a, int n) { int xx[4] = {1, 0, -1, 0}; int yy[4] = {0, 1, 0, -1}; int x=0, y=0, pos=0; for (int i=1; i<=n*n; i++) { a[x][y] = i; if (x+xx[pos]>=n || x+xx[pos]<0 || y+yy[pos]>=n || y+yy[pos]<0 || a[x+xx[pos]][y+yy[pos]]!=0) { pos = (pos+1) % 4; } x += xx[pos]; y += yy[pos]; } } int main() { int n; while (scanf("%d", &n) != EOF) { int **a = (int **)malloc(sizeof(int *) * n); for (int i=0; i<n; i++) { a[i] = (int *)malloc(sizeof(int) * n); } clear(a, n); fill(a, n); print(a, n); for (int i=0; i<n; i++) { free(a[i]); } free(a); } return 0; }
输入输出
2 1 2 4 3 5 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9