在之前我用数组输出过蛇形矩阵,今天在看网页时发现了也可以不用数组和vector也可以实现输出。 出处:http://ayeye.blog.sohu.com/300658293.html [objc] view plain copy
- #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 += 44 * (nSize - 1 - 22 * k);
- }
- nBaseIndex += (nSize - 1 - 22 * 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;
- }
|