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
来源
算法经典
上传者
首席执行官

思路:
        先求出坐标中点, 从四周向中间靠近

代码:
#include <stdio.h>
#define N 110

int main()
{
	int i, j, n, sum = 1;
	int a[N][N];
	scanf("%d", &n);

	for(i = 0; i <= (n-1)/2; i++){							// (n-1)/2  中间位置, 对称
		for(j = i; j <= n-i-1; j++) a[j][n-i-1] = sum ++;	// 右边
		for(j = n-2-i; j >= i; j--) a[n-i-1][j] = sum ++;	// 下边  (右第一元素已排好(-1))
		for(j = n-i-2; j >= i; j--) a[j][i] = sum ++;		// 左边  (同上)
		for(j = i+1; j < n-i-1; j++) a[i][j] = sum ++;		// 上边  (左第一元素已排好(+1), 右最后一个元素已排好('<'))
	}
	for(i = 0; i < n; i++){
		for(j = 0; j < n; j++) printf("%d ", a[i][j]);
		printf("\n");
	}

	return 0;
}                



你可能感兴趣的:(技巧)