NYOJ 33 蛇形填数
2014-04-11 08:23
330 查看
描述 在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)输出输出结果是蛇形方陈。样例输入
样例输出
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
永远走的方向永远是 ↓ ← ↑ → 。判断是否要改变方向的办法是 :把数组初始化为0,当遇到不为0的数时,就是时候改变方向了。(全局数组系统会自动初始化为0,否则要用memset()).。用now来存放现在该放的值,当now=n*n 时,结束。
#include <stdio.h> int snack[100][100]; int main() { int n; scanf("%d",&n); int i=0,j=n-1; int now=0; int sign=1; while(now<n*n) { while( !snack[i][j] && i<n ) //向下 snack[i++][j]=++now; i--; j--; while( !snack[i][j] && j>=0 ) //向左 snack[i][j--]=++now; j++; i--; while( !snack[i][j] && i>=0 ) //向上 snack[i--][j]=++now; i++; j++; while( !snack[i][j] &&j<n ) //向右 snack[i][j++]=++now; j--; i++; } for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%5d",snack[i][j]); printf("\n"); } return 0; }