您的位置:首页 > 其它

回形针填数

2017-10-07 10:45 453 查看


蛇形填数

时间限制: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

;

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-1 

    a[++i][j] = ++k;

  

while(j >= 1&& !a[i][j-1])     / / 最下行  j : n-1 ~ 1

    a[i][--j] = ++k;

while(i >= 1&& !a[i-1][j])   / / 最左列   i : n-1 ~ 1

    a[--i][j] = ++k;

while(j < n-1&& !a[i][j+1])  / / 最上行  j : 1 ~ n-1

    a[i][++j] = ++k;

    }

   
for(i = 0;i < n;i ++){

   for(j = 0;j < n;j ++){

   
  printf("%d ",a[i][j]);

   }

   printf("\n");

    }  

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oj ACM 蛇形填数