训练交流.n×m的螺旋矩阵

题目描述:

输入n和m,然后转着圈的把数字都打印出来

举例
输入

4 5
输出
1 2 3 4 5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
其中n是行数  m是列数


解题思路:比n阶螺旋矩阵再复杂点,思路大体一致,感觉没啥好说的,for循环不断遍历就行

#include <iostream>
using namespace std;

int main()
{
    int n, m;
    cin >> n >> m; //输入行与列

    int** ans = new int* [n]; //新建二维数组用于存储结果
    for (int i = 0; i < n; i++)
        ans[i] = new int[m] {0};

    int left = 0, right = m - 1; //二维数组左端0,右端m-1
    int up = 0, down = n - 1; //二维数组上限从0开始,下限n-1
    int count = 1; //填充的数
    while (left <= right && up <= down)
    {
        for (int i = left; i <= right; i++) //从左往右
        {
            ans[up][i] = count++;
        }
        up++; //上限下移一次
        if (up > down) //如果上限过低了,判断跳出
            break;
        for (int i = up; i <= down; i++) //从上往下
        {
            ans[i][right] = count++;
        }
        right--; //右端左移一次
        if (left > right)
            break;
        for (int i = right; i >= left; i--) //从右往左
        {
            ans[down][i] = count++;
        }
        down--;
        if (up > down)
            break;
        for (int i = down; i >= up; i--)  //从下往上
        {
            ans[i][left] = count++;
        }
        left++;
        if (left > right)
            break;
    }

    for (int i = 0; i < n; i++)  //输出结果
    {
        for (int j = 0; j < m; j++)
            cout << ans[i][j] << "\t";
        cout << endl;
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值