顺时针打印数组

顺时针遍历数组。

忘了是在哪看到的这个问题,刚看到时直接懵逼了。不过其实还好吧
闲着没事干就把他给写了出来。
我们定义 上面边界 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;
}

喜欢的话,给博主赏一杯冰阔乐吧


  转载请注明: Maserhe 顺时针打印数组

 上一篇
最小贸易 最小贸易
题目:最优贸易原题传送门 题目描述$C$国有$n$个大城市和$m$ 条道路,每条道路连接这 $n$个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 $m$ 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行
下一篇 
最小花费 最小花费
题目:最小花费原题传送门 题目描述在$n$个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。 输入格式第一行输入
2020-07-28
  目录