蛇形填数
时间限制:
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
来源
- 算法经典 上传者
-
首席执行官
思路:定义一个二维数组,进行初始化为0,通过四个 for 循环(最上行,最下行,最左列,最右列)分别进行赋值。最重要的就是 判断条件:该位置的下一个元素为零,则到达边界。
代码:#include <stdio.h>
int main( void ){int i, j, n;while(~scanf("%d", &n )){int a[n][n];for(i = 0;i < n;i ++)for(j = 0;j < n;j ++)a[i][j] = 0;int k = 0;i = -1;j = n - 1;while(k < n*n ){ / / 全体 whlie 的一个判断条件: 该位置的下一个元素为零则继续while循环while(i < n-1&& !a[i+1][j]) / /最右列,i : 0 ~ n-1a[++i][j] = ++k;while(j >= 1&& !a[i][j-1]) / / 最下行 j : n-1 ~ 1a[i][--j] = ++k;while(i >= 1&& !a[i-1][j]) / / 最左列 i : n-1 ~ 1a[--i][j] = ++k;while(j < n-1&& !a[i][j+1]) / / 最上行 j : 1 ~ n-1a[i][++j] = ++k;}for(i = 0;i < n;i ++){for(j = 0;j < n;j ++){printf("%d ",a[i][j]);}printf("\n");}}return 0;}