蛇形填数
时间限制:
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
思路:依次 向下、向左、向上、向右填数,每个方向填数的最后一个可填数由下一个方向填,比如:(1、2) 、(3、4)、(5、6)、(7)
AC代码:
#include<cstdio> #include<cstring> using namespace std; const int maxn = 100 + 2; int a[maxn][maxn]; int main(){ int n; while(scanf("%d",&n) == 1){ memset(a,0,sizeof(a)); int total = n * n; int t = 1; int i = 1; int j = n; while(t < total){ while(i < n && a[i+1][j]==0) a[i++][j] = t++; //向下 while(j > 1 && a[i][j-1]==0) a[i][j--] = t++; //向左 while(i > 1 && a[i-1][j]==0) a[i--][j] = t++; //向上 while(j < n && a[i][j+1]==0) a[i][j++] = t++; //向右 if(t == total) a[i][j] = t; } for(int i = 1; i <= n; i++){ printf("%d",a[i][1]); for(int j = 2; j <= n; j++){ printf(" %d",a[i][j]); } printf("\n"); } } return 0; }