顺时针遍历数组。
忘了是在哪看到的这个问题,刚看到时直接懵逼了。不过其实还好吧
闲着没事干就把他给写了出来。
我们定义 上面边界 up , 下面边界down, 左边边界left, 右边边界rihgt;
然后分别 按照次序进行打印就完了。
效果如下,不过这样好像没有什么实际工程意义, 吐槽~~。
突然想起 对于未知二位数组指针,可以使用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;
}
喜欢的话,给博主赏一杯冰阔乐吧
![]() |
![]() |
![]() |