【C算法】二维数组回字形填充
【C算法】二维数组回字形填充
面试的时候遇到一道C语言小算法题目,题目是这样的:以下图方式将1-100数字填充到一个10*10的二维数组内:
编写程序的要点是确定填充的4个方向,并判别填充的界限。代码如下:
/* ============================================================================ Name : project1.c Author : M.Bing Version : Copyright : andon Description : Hello World in C, Ansi-style ============================================================================ */ #include <stdio.h> #include <stdlib.h> int table[10][10]; typedef enum { dir_up, dir_down, dir_right, dir_left }num_dir; void clear_table() { int i; int j; for(i = 0;i < 10; i++ ) for(j = 0;j < 10; j++) { table[i][j] = 0; } } void printf_table() { int i,j; for(i = 0;i < 10; i++) { for(j = 0;j < 10; j++) { printf("%3d ",table[i][j]); } printf("\n"); } } void draw_table() { int i = 0; int j = 0; int num = 1; num_dir now_dir; now_dir = dir_right; while(num < 101) { table[i][j] = num; switch(now_dir) { case dir_right: j++; if(j < 9) { if(table[i][j+1] != 0) { now_dir = dir_down; } } else { now_dir = dir_down; } break; case dir_down: i++; if(i < 9) { if(table[i+1][j] !=0) { now_dir = dir_left; } } else { now_dir = dir_left; } break; case dir_left: //dir_left j--; if(j > 0) { if(table[i][j-1] != 0) { now_dir = dir_up; } } else { now_dir = dir_up; } break; case dir_up: //dir_up i--; if(i > 0) { if(table[i-1][j] != 0) { now_dir = dir_right; } } else { now_dir = dir_right; } break; default: break; } num++; } } int main(void) { clear_table(); draw_table(); printf_table(); return EXIT_SUCCESS; }
程序执行效果如下: