现在的位置: 首页 > 综合 > 正文

方阵的主对角线之上称为“上三角”,动态生成用于填充n阶的上三角区域

2013年11月19日 ⁄ 综合 ⁄ 共 1707字 ⁄ 字号 评论关闭

说明:
例如 :当n=3时,则输出

1 2 3

6 4

5

当n=4时,则输出

1 2 3 4

9 10 5

8 6

7

程序码:

#include <stdlib.h>
#include <stdio.h>



int **InitArray_2( int **arrayname, const int row, const int col);
void FreeArray( int ***p_arrayname);
void PrintArray( int **arrayname, int row, int col);
void OrderArray( int **arrayname, int dim);


//全局变量
static int ROW=0,COL=0;


int main()
{
	int **array=NULL, dim=0;
	
	//输入要所要的维数
	printf("请输入数据的维数 :\n");
	scanf("%d",&dim);
	
	//初始化数组
	array=InitArray_2( array, dim, dim);
	PrintArray( array, dim, dim);

	//按圈从外到内
	OrderArray( array, dim);

	//打印数组
	PrintArray( array, dim, dim);
	
	//释放分配空间
	FreeArray( &array);

	
	return 0;
}

void PrintArray( int **arrayname, int row, int col)
{
	ROW=row;
	COL=col;
	for( int i=0; i < row; i++)
	{
		for( int j=0; j < col; j++)
			printf( "%4d ",*(*(arrayname+i)+j));
		
		printf("\n");
	}	
	printf("\n");
}

int **InitArray_2(  int **arrayname, const int row, const int col)
{
	int g_CountData=0;
	arrayname = (int **) malloc(sizeof (int *) * row);
	
	for( int i = 0; i < row; i++)
		*(arrayname+i)=(int *) malloc(sizeof( int) * col);

	for( int j=0; j < row; j++)
		for( int k=0; k < col; k++)
			*(*(arrayname+j)+k)=g_CountData;


	return arrayname;


}

void FreeArray( int ***p_arrayname)
{

	for( int i = 0; i < ROW; i++)
	{
		free(*(*p_arrayname+i));
		*(*p_arrayname+i)=NULL;
	}
	free(*p_arrayname);
	*p_arrayname=NULL;
	printf("释放成功\n");

}

void OrderArray( int **arrayname,  int dim)
{

	static int startpoint_x=0;
	static int startpoint_y=0;
	static int sm_count=1;
	static int sm_data=1;

	 int row=0;
	 int col=0;


	//根据相对的起始点设置变量的范围


	if( dim <=0 )
		return;
	else if (dim == 1)
		arrayname[row+startpoint_x][col+startpoint_y]=sm_count;
	else
	{
		//向右动
		for( row = row + startpoint_x, col = col + startpoint_y; col < dim + startpoint_x; col++)
			arrayname[row][col] = sm_count++;		

		//向下左动
		for( col -= 2, row +=1; row < dim+startpoint_y; row++, col--)
			arrayname[row][col] = sm_count++;

		//向上动
		for( col += 1, row -= 2; row > startpoint_x; row--) 
			arrayname[row][col] = sm_count++;
		
		startpoint_x++;
		startpoint_y++;

	}
	OrderArray( arrayname, dim - 3);
}

抱歉!评论已关闭.