顺时针遍历矩阵

顺时针遍历二维数组。

忘了是在哪看到的这个问题,刚看到时直接懵逼了。不过其实还好吧
闲着没事干就把他给写了出来。
我们定义 上面边界 up , 下面边界down, 左边边界left, 右边边界rihgt;
然后分别 按照次序进行打印就完了。
效果如下,不过这样好像没有什么实际工程意义, 吐槽~~。
顺时针打印-2020-10-01-12-55-29
突然想起 对于未知二位数组指针,可以使用sizeof 进行做除法求取数组的长和宽。
假设arry是一个int** 类型的 二位数组指针
可以这样获取行数和列数。
行数 sizeof(arry) / sizeof(*arry)
列数 sizeof(*arry) / sizeof(int)

代码

话不多说,show me your code

#include<iostream>
using namespace std;

int main(){

    int arry[8][10] = {0};

    int x = sizeof (arry) / sizeof(*arry); // 获取行
    int y = sizeof(*arry) / sizeof(int);   // 获取列

    // 顺时针打印。 
    int left = 0, right = y - 1, up = 0, down = x - 1; // 记录 上下左右的边界。
    int cnt = 0; 
    while (left < right && up < down)
    {
        // 打印 上面边界
        for (int i = left; i <= right; i ++ ) arry[up][i] = cnt ++ ;
        up ++ ;
        // 打印 左边列。
        for (int i = up; i <= down; i ++ ) arry[i][right] = cnt ++ ;
        right -- ;
        // 打印 下边界。
        for (int i = right; i >= left; i -- ) arry[down][i] = cnt ++ ;
        down -- ;
        // 打印 右边界
        for (int i = down; i >= up; i -- ) arry[i][left] = cnt ++ ;
        left ++ ;

    }
    for (int i = 0; i < 8; i ++ ){
        for (int j = 0; j < 10; j ++ ){
            cout << arry[i][j] <<" ";
        }
        cout << endl;
    }
    system("pause");
    return 0;
}

我的博客传送门
喜欢的话,给博主赏一杯冰阔乐吧

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值