打印螺旋矩阵

来源:互联网 发布:淘宝宝贝排序怎么设置 编辑:程序博客网 时间:2024/05/05 02:16

大家也许都见过这个题目 ,我开始遇到的是让打印方阵。后来想想打印普通矩阵也是可以的

我写了一下程序是按顺时针方向打印的,

 初步想法是预先申请数组缓存a[20][20]或更大的缓存。

当然也可以动态申请数组缓存的

 

谁有更好的方法可以帮我修改一下,谢谢!

 

运行如下:

 

运行如下: array 5*11

 

当然你可以加上MFC界面

螺旋矩阵10×10

 

// 螺旋数组.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
#define  M  20
#define  N  20
//void  createArray(int n)
//{
//       int **a=new int *[n];//动态建立二维数组
//       for(int i=0;i<n;i++)
//            a[i]=new int[n];
//  
//};

//array[i][j] ====== *((int*)array + n*i + j)
void printfArray(int **array, int m, int n)
{
    //a[i][j]  = *((int*)array + n*i + j);
    for (int i=0;i<m;i++)
    {
        for (int j =0;j <n;j++)
        {
             cout<< setw(6)<<*((int*)array + n*i + j)<<"  ";
        }
        cout<<endl;
    }

};

void helixArray3(int a[][N],int m,int n=0)
{
    int m_Count = 1;
    int total=m*n;
    int i=0;
    int j =0;
    int num=0;
    while(m_Count<total)
    {
        num=0;
        while (num++< n -1)
        {
            a[i][j++] = m_Count++;
        }
        num=0;
        while (num++< m-1)
        {
            a[i++][j] = m_Count++;
        }
        num=0;
        while (num++< n-1)
        {
            a[i][j--] = m_Count++;
        }
        num =0;
        while (num++< m-1)
        {
            a[i--][j] = m_Count++;
        }
        //cout<<endl;
        //cout<<"i="<<i<<" j="<<j<<" n= "<<n<<"    m_Count"<<m_Count<<endl;
        j++;
        i++;
        n= n-2;
        m= m-2;
        if (m==1&&n>1)//如果n为奇数会出现最后m=1的情况
        {
            cout<<"test"<<endl;
                num=0;
           while (num++<n)
           {
                a[i][j++]=m_Count++;
           }
          
        }
        if (n==1&&m>1)//如果n为奇数会出现最后n=1的情况
        {  cout<<"test2"<<endl;
            num=0;
            while (num++<m)
            {
                a[i++][j]=m_Count++;
            }

        }
        if (n==1&&m==1)
        {
            a[i][j]=m_Count++;
        }
       
    }
};

int main(int argc, _TCHAR* argv[])
{
  

    cout<<"--------------------------------------------------------------"<<endl;
   int b[M][N];//
 //这里可以要求输入(m <M &&n <N)即可
   helixArray3(b,M,N);
   printfArray((int**)b,M,N);
   cout<<"--------------------------------------------------------------"<<endl;
   cin.get();//意外发现这里读取的是上次输入留下的的'/n'
   cin.get();
   return 0;
}

 

原创粉丝点击