nyoj 33 蛇形填数

蛇形填数

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


猜你喜欢

转载自blog.csdn.net/ldw201510803006/article/details/79317663