蛇形矩阵(矩阵问题)

题目描述
蛇形矩阵,是由1开始的自然数一次排列成的N*N的正方形矩阵,数字依次由外而内的递增。如 N=3时蛇形矩阵为:
1 2 3
8 9 4
7 6 5
N=6时蛇形矩阵为:
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
输入蛇形矩阵宽度,动态分配二维数组,设置蛇形矩阵并输出结果。
输入
测试次数t
每组测试数据一行:数组大小N(>0)
输出
对每组测试数据,输出计算得到的蛇形矩阵。每行元素间以空格分隔,最后一个元素后无空格。
每组测试数据之间以空行分隔。

输入样例1
3\n
3\n
6\n
2\n

输出样例1
1 2 3\n
8 9 4\n
7 6 5\n
\n
1 2 3 4 5 6\n
20 21 22 23 24 7\n
19 32 33 34 25 8\n
18 31 36 35 26 9\n
17 30 29 28 27 10\n
16 15 14 13 12 11\n
\n
1 2\n
4 3\n
\n

  • 一开始总是输出错误,不是数组越界就是数据被覆盖,还是要多观察题目的两个例子才得出边界条件
#include<iostream>
using namespace std;
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int N;
        cin >> N;
        int** p = new int* [N];
        for (int i = 0; i < N; i++)
            p[i] = new int[N];
        int num = 1;
        int left = 0, right = N, up = 0, down = N;//设边界
        while (left < right && up < down)//每走一圈边界判断
        {
            for (int i = left; i < right; i++)
                p[up][i] = num++;
            if (left == right - 1)//N为奇数的边界条件
                break;
            for (int i = up + 1; i < down; i++)
                p[i][right - 1] = num++;
            for (int i = right - 2; i >= left; i--)
                p[down - 1][i] = num++;
            if (up == down - 2)//N为偶数的边界条件
                break;
            for (int i = down - 2; i > up; i--)
                p[i][left] = num++;
            up++;
            down--;
            left++;
            right--;
        }
        for (int i = 0; i < N; i++)
            for (int j = 0; j < N; j++)
            {
                if (j < N - 1)
                    cout << p[i][j] << " ";
                else
                    cout << p[i][j] << endl;
            }
        cout << endl;
        delete[]p;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值