蛇形填数
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
-
输入
- 直接输入方陈的维数,即n的值。(n<=100) 输出
- 输出结果是蛇形方陈。 样例输入
-
3
样例输出
-
7 8 1 6 9 2 5 4 3
-
-
思路:
-
填数的顺序是 下 X++,左 Y--,上 x--, 右y++; 当这个数没有被填且没出界的时候可以填
#include<stdio.h> #include<string.h> int a[100][100]; int main() { int t = 1; int n; int x, y; memset(a, 0 , sizeof(a)); scanf("%d",&n); a[0][n-1] = 1; x = 0, y = n - 1; while(t < n * n){ while(x + 1 < n && !a[x+1][y])//!!x的下一个不会出界,且下一个没有被填就会一直执行 { a[++x][y] = ++t;//注意是++x,++t } while(y - 1 >= 0 && a[x][y-1] == 0) { a[x][--y] = ++t; } while(x - 1 >= 0 && a[x-1][y] == 0) a[--x][y] = ++t; while(y + 1 < n && a[x][y+1] == 0) a[x][++y] = ++t; //printf("%d\n",t); } //printf("ok\n"); for(x = 0; x < n; x++){ for(y = 0; y < n - 1; y++){ printf("%d ",a[x][y]); } printf("%d\n",a[x][n-1]); } return 0; }