不用数组输出蛇形矩阵

    xiaoxiao2021-12-14  16

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

    转载请注明原文地址: https://ju.6miu.com/read-971390.html

    最新回复(0)