NYOJ 33 蛇形填数
2014-10-22 16:31
429 查看
蛇形填数
时间限制: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 100 int P ; void Fill(int number, int high,int begin, int size) { if (size <= 0) return ; if (size == 1) P[high][begin] = number; int i; int h = high,v = begin; P[h][v] = number;number++; //先填好最右上角的数 for (i = 0; i<size - 1; i++ ) //往下 { h++; P[h][v] = number;number++; } for (i=0; i<size-1; i++) //往左 { v--; P[h][v] = number;number++; } for (i = 0; i< size-1; i++) //往上 { h--; P[h][v] = number;number++; } for (i= 0; i<size-2;i++) //往右 { v++; P[h][v] = number;number++; } Fill(number,h+1,v,size -2); //调用递归算法 } int main(void) { int n,h,v; scanf("%d", &n); Fill(1,0,n-1,n); for (h = 0; h<n;h++) //输出 { for (v= 0; v<n; v++) printf("%d ",P[h][v]); printf("\n"); } return 0; }