您的位置:首页 > 职场人生

不用数组输出蛇形矩阵

2016-12-03 22:17 531 查看
在之前我用数组输出过蛇形矩阵,今天在看网页时发现了也可以不用数组和vector也可以实现输出。

出处:http://ayeye.blog.sohu.com/300658293.html

#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;

#define MIN(a,b) ( (a)<(b) ? (a):(b))

int nSize;   // 矩阵维度,nSize*nSize;
int nHalfSize;

int nCircle; // 第几圈
int nEdge;   // 第几条边;
int nOffset; // 边上第几个值

int nBaseIndex; // 数值基数,当前圈基数+当前边基数

int GetNumber(int i, int j)
{
// 根据ij判断第几圈
nCircle = MIN(nSize, i);
nCircle = MIN(nCircle, j);
if (i >= nHalfSize) nCircle = MIN(nCircle, nSize - 1 - i);
if (j >= nHalfSize) nCircle = MIN(nCircle, nSize - 1 - j);

// 根据ij判断第几条边,顺时针顺序0~3
// 同时计算偏移值;
if (i > j)
{
// 左,下
if (j == nCircle)
{
nEdge = 3;
nOffset = nSize - 1 - nCircle - i;
}
else
{
nEdge = 2;
nOffset = nSize - 1 - nCircle - j;
}
}
else
{
// 右,上
if (i == nCircle)
{
nEdge = 0;
nOffset = j - nCircle;
}
else
{
nEdge = 1;
nOffset = i - nCircle;
}
}

// 计算数值
nBaseIndex = 0;
for (int k = 0; k < nCircle; k ++)
{
nBaseIndex += 4 * (nSize - 1 - 2 * k);
}
nBaseIndex += (nSize - 1 - 2 * nCircle) * nEdge;

return nBaseIndex + nOffset + 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
// 输入
cout << "请输入数组维度N,将输出N*N的蛇形矩阵:\n";
cin >> nSize;
nHalfSize = nSize / 2;
cout << "打印矩阵如下:\n";

for (int i = 0; i < nSize; i ++)
{
for (int j = 0; j < nSize; j ++)
{
cout << GetNumber(i, j) << " ";
}
cout << "\n";
}

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐