蛇形矩阵 输出

有的时候零零碎碎的东西太多,总归是需要找个地方来记录一下。大神们有个Git、CSDN,我就先在这里水一下吧,就只当像云笔记一样偶尔记录一下生活吧。

今天做了一道题。。。

根据输入的数据N,需要输出一个蛇形矩阵(N*N)。

5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

第一行的数据是矩阵的行列数(相等),矩阵应该是上图所示的样子。

对于这样的输出,我们还是要把规律找出来,按照从左到右从上到下,把每一个数按照矩阵最外侧向最内侧填满即可。

P.S.如有更好的方法欢迎大家留言。

# include <iostream>
using namespace std;
int main()
{
    int srow,erow,scol,ecol,n;//s e 分别表示是开始还是结束
    cin>>n;
    int counter=1;
    int** matrix = new int*[n];
    for(int i=0; i<n; ++i)
    {
        matrix[i]=new int [n];
    }
    srow=0;
    erow=n-1;
    scol=0;
    ecol=n-1;
    while(counter<=n*n)//判断是否生成完毕
    {
       //首行
        for(int i=scol; i<=ecol; i++)
        {
            matrix[srow][i]=counter++;
        }
        srow++;
        //最右列
        for(int i=srow; i<=erow; i++)
        {
            matrix[i][ecol]=counter++;
        }
        ecol--;
        //末行
        for(int i=ecol; i>=scol; i--)
        {
            matrix[erow][i]=counter++;
        }
        erow--;
        //最左列
        for(int i=erow; i>=srow; i--)
        {
            matrix[i][scol]=counter++;
        }
        scol++;
    }
    //输出
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; ++j)
        {
            cout<<matrix[i][j]<<"\t";
        }
        cout<<endl;
    }
}

程序结果在CodeBlocks16.01 中运行通过


Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容