打印绕圈矩阵(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<len;i++)
	{
		str[index]=i;
		index += nSize;
	}
}

int main(int argc, char* argv[])
{
	int size(7);
	//cin >> size;
	int x(0),y(0);
	for(y;y<size;y++)
	{
		for(x=0;x<size;x++)
		{			
			cout << cycleXy(x,y,size) << '\t';
		}
		cout << endl;
	}
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值