【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;
}
程序执行效果如下:

浙公网安备 33010602011771号