打印

【转】不用数组输出蛇形矩阵

[复制链接]
524|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
风萧寒|  楼主 | 2017-1-6 12:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

134

帖子

3

粉丝