您的位置:首页 > 其它

nyoj 33 蛇形填数

2018-02-12 16:57 323 查看

蛇形填数

时间限制: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])
4000
;
}
printf("\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: