打印绕圈矩阵(C语言风格的代码)

// raoQuan.cpp : Defines the entry point for the console application.
//1 12  11  10
//2 13  16  9
//3 14  15  8
//4 5   6   7
#include "stdafx.h"
#include "iostream.h"
#include "malloc.h"

//根据x,y和size来返回这个位置的数值; x,y均从0开始计数
int orbit(int x,int y,int size);
int girth(int size);
int offsetOfBegin(int x,int y,int size);

int cycleXy(int x,int y,int size)
{
	int value=0;
	int level=orbit(x,y,size);
	int offset=offsetOfBegin(x,y,size);
	int i=-1;
	while(level>0)
	{
		level--;
		value += girth(size-level*2);		
	}
	value += offset;
	return value;
}

//根据size来返回周长
int girth(int size)
{
	if(size == 1)
	{
		return 1;
	}
	return (size-1)*4;
}

//根据x,y,size确定坐标在第几层轨道 
int orbit(int x,int y,int size)
{
	//int levels = size/2;
	//levels = size%2==0 ? levels : levels+1;
	int ox=size-1-x < x ? size-1-x : x;
	int oy=size-1-y < y ? size-1-y : y;
	return ox < oy ? ox : oy;
}

//坐标x,y相对于该层轨道起始点的偏移
int offsetOfBegin(int x,int y,int size)
{
	int levels = size/2;
	levels = size%2==0 ? levels-1 : levels;

	int x0,y0;	//轨道起始点
	int offset=0;
	int level=orbit(x,y,size);

	x0=y0=level;
	int max=girth(size-level*2);
	offset=(x-x0)+(y-y0);
	if(x>y)
	{
		offset = max - offset;
	}
	return offset+1;
}

void raoQuan(unsigned int size)
{
	char *str;
	str = NULL;
	str = (char *)malloc(size*size*sizeof(char));
	int len=size*size;
	int i(0),index(0),nSize(size);
	for(;i> size;
	int x(0),y(0);
	for(y;y

你可能感兴趣的:(打印绕圈矩阵(C语言风格的代码))