练习:
南邮
/** * 让我们从1开始依次填写。设“笔”的坐标为(x,y),则一开始x=0,y=n-1,即第0行,第n-1列(别忘了行列的范围是0到n-1,没有第n列). * “笔”的移动轨迹是:下,左,上,右。总之,先是下,到不能填了为左,接着是上,最后是右。 * “不能填”是指再走就出界了,或者再走就要走到以前填过的格子。如果我们把所有格子初始化为0,就能很方便地加以判断。 */#include#include #define MAXN 65int arr[MAXN][MAXN];int main() { int n, x, y, i, j, cn; while (~scanf("%d", &n)) { memset(arr, 0, sizeof(arr)); cn = arr[x = 0][y = n - 1] = 1; while (cn < n * n) { while ((x + 1 < n) && (!arr[x + 1][y])) { arr[++x][y] = ++cn; } while ((y - 1 >= 0) && (!arr[x][y - 1])) { arr[x][--y] = ++cn; } while ((x - 1 >= 0) && (!arr[x - 1][y])) { arr[--x][y] = ++cn; } while ((y + 1 < n) && (!arr[x][y + 1])) { arr[x][++y] = ++cn; } } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf("%5d", arr[i][j]); } printf("\n"); } } return 0;}