【趣味题】输出蛇形矩阵(由内向外、由外向内)、输出Z字形矩阵。

1.蛇形矩阵更新。2015-1-12

突然想到不管要从那边开始打印,先存到数组,等输出的时候调换i,j的起始和方向就行了,以前的弄麻烦了。
bool变量可控制从里还是从外。
#include
#define N 10

void snake(bool fromout)
{
	int a[N][N];
	int start=(fromout?0:-N*N-1);
	for(int k=0;kk;j--)
			a[i][j]=++start;
		for(i;i>k;i--)
			a[i][j]=++start;
	}
	//print
	for(int i=N-1;i>=0;i--)
	{
		for(int j=0;j


[旧版]1.输出蛇形矩阵,由外层向内层和由外层向内层。

下面贴上由外层向内层的代码:

#include
#define N 10
int a[N][N]={0};
int count;
void fill_value_around(int line,int column)
{
	if(line>column)
		return;
	else if(line==column)
		a[line][column]=++count;
	int narrow=line;
	int line_record=line,column_record=column;
	for(;linenarrow;column--)
		a[line][column]=++count;
	for(;line>narrow;line--)
		a[line][column]=++count;
	for(;column
如果希望由外向内,只需修改main函数中代码如下(只要修改count=-N*N-1和printf中加负号)

int main()
{
	count=-N*N-1;//修改1
	fill_value_around(0,N-1);
	for(int i=0;i
简单说一下思路,写一个函数,目的是填写外圈的一层,然后到达下一层的入口。然后递归即可。


2.Z字形填数。

1    2    6

3    5    7

4    8    9

思路:lean_fill函数,toward用来记录方向,区分是向左下还是右上填写。、

在函数内部执行循环直至到达边界。

有一个地方,填完最长的对角线后,我选择了从右下角再开始反着填写。不过后来想起来,每条线上的数字角标是有规律的,其角标和逐次+1。

不过这么写有更好的适应性,只需要修改边界和填写方向即可实现不同方向的Z字填数。

#include
#include
#define N 5
int a[N][N]={0};
int count;

void lean_fill(int toward,int line,int column)
{
	while(line=0&&column>=0)
	{
		a[line][column]=++count;
		line=line+toward;
		column=column-toward;
	}
}
int main()
{
	count=0;
	int line=0,column=0;
	int flag=1;
	for(int i=0;i0;)
	{
		flag=-flag;
		lean_fill(flag,i--,N-1);
		flag=-flag;
		lean_fill(flag,N-1,i--);
	}
	for(int i=0;i

以上两题难度不大,主要还是学到了用windows.h延时输出才想着把它们贴上来以做记录。

你可能感兴趣的:(算法,C语言知识整理)