例3-2 蛇形填数
问题:在n*n方阵里填入1,2,3...,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
算法简单分析:将右上角的1作为入口点,然后先往下走填充二维数组,接着往左,然后往上,接着往右,一直重复这个过程(直到被赋值的值到了n*n这个临界值)
代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 4 #define MAX_NUM 100 5 6 int arr[MAX_NUM][MAX_NUM]; 7 8 int main(void) 9 { 10 int i, j; 11 int n = 0; 12 int tot; 13 14 memset(arr, 0, sizeof(arr)); 15 printf("please enter a number:\n"); 16 scanf("%d", &n); 17 tot = arr[i=0][j=n-1] = 1; 18 19 while (tot < n * n) 20 { 21 while (i+1 < n && !arr[i+1][j]) arr[++i][j] = ++tot; //往下走赋值 22 while (j-1 >= 0 && !arr[i][j-1]) arr[i][--j] = ++tot; //往左走赋值 23 while (i-1 >= 0 && !arr[i-1][j]) arr[--i][j] = ++tot; //往上走赋值 24 while (j+1 < n && !arr[i][j+1]) arr[i][++j] = ++tot; //往右走赋值 25 } 26 27 for (i = 0; i < n; i++) 28 { 29 for (j = 0; j < n; j++) 30 printf("%d\t", arr[i][j]); 31 printf("\n"); 32 } 33 return 0; 34 }
浙公网安备 33010602011771号