【无标题】蛇形矩阵

 给你一个整数n,输出n∗n的蛇形矩阵。

输入描述:

输入一行,包含一个整数n

输出描述:

输出n行,每行包含n个正整数,通过空格分隔。

 

1<=n<=1000

 

输入样例:

4

 

输出样例:

 

1 2 6 7

3 5 8 13

4 9 12 14

10 11 15 16

 

思路: 蛇形三角形和蛇形填数的升级版,多个分别奇偶讨论而已。n为奇数和n为偶数时,斜着填数的次数不同。#include <bits/stdc++.h>
using namespace std;
int arr[1010][1010];
int n;
void solve()//把矩形分为两个三角形(1,1)(1,n)(n,1)组成,(1,n)(n,n)(n,1)组成 
{
    arr[1][1]=1;//起点初始化 
    int tot=1;//计数器初始化 
    int x=1,y=1;//坐标初始化 
    if(n%2==0)//n为偶数 
    {
    while(tot<n*n) //先填左上角的 
    {
        arr[x][++y]=++tot;//遇到上边界向右填数 
        while(arr[x+1][y-1]==-1)    arr[++x][--y]=++tot;//判断下个点,是否在矩阵范围内并斜左下填数 
        if(tot==(((n*n)/2)+n/2)) break;//填到对角线的时候退出,找规律即可 
        arr[++x][y]=++tot;//遇到左边界向下填数 
        while(arr[x-1][y+1]==-1)    arr[--x][++y]=++tot;//斜右上填数 
    }
    while(tot<n*n)//继续补完 
    {
        arr[x][++y]=++tot;//同理可得 
        while(arr[x-1][y+1]==-1)    arr[--x][++y]=++tot;    
        arr[++x][y]=++tot;
        while(arr[x+1][y-1]==-1)    arr[++x][--y]=++tot;
    }}
    else//n为奇数,遇到对角线情况退出的位置不同,其余类似 
    {
    while(tot<n*n)
    {
        arr[x][++y]=++tot;
        while(arr[x+1][y-1]==-1)    arr[++x][--y]=++tot;
        arr[++x][y]=++tot;
        while(arr[x-1][y+1]==-1)    arr[--x][++y]=++tot;
        if(tot==((n*n)/2+n/2+1))    break; 
    }
    while(tot<n*n)
   {
        arr[++x][y]=++tot;
        while(arr[x+1][y-1]==-1)    arr[++x][--y]=++tot;
        arr[x][++y]=++tot;
        while(arr[x-1][y+1]==-1)    arr[--x][++y]=++tot;
    }    
    }
    return ;
}
int main()
{
    int i,j;
    cin>>n;
    for(i=1;i<=n;i++)//给矩阵划上范围,先让矩阵里的值都为-1 
        for(j=1;j<=n;j++)    arr[i][j]=-1;
    
    solve();
    
    for(i=1;i<=n;i++)//输出矩阵 
    {
    for(j=1;j<=n;j++)    cout<<arr[i][j]<<" ";
    cout<<endl;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_不欺暗室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值