您的位置:首页 > 编程语言 > C语言/C++

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

2014-12-27 14:35 204 查看
// 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: