不用数组输出蛇形矩阵

在之前我用数组输出过蛇形矩阵,今天在看网页时发现了也可以不用数组和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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值