【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;

}

程序执行效果如下:

 

posted @ 2013-10-25 14:08  M.Bing  阅读(1121)  评论(0编辑  收藏  举报