题解
利用 left right top bottom 四个变量 来表示 这个矩形的边界
#include <iostream>
using namespace std;
const int N = 105;
int a[N][N];
int n, m;
int main() {
cin >> n >> m;
int left = 0, right = m - 1, top = 0, bottom = n - 1;
int k = 1;
while (left <= right && top <= bottom) {
for (int i = left ; i <= right; i ++) {
a[top][i] = k ++;
}
for (int i = top + 1; i <= bottom; i ++) {
a[i][right] = k ++;
}
for (int i = right - 1; i >= left && top < bottom; i --) {
a[bottom][i] = k ++;
}
for (int i = bottom - 1; i > top && left < right; i --) {
a[i][left] = k ++;
}
left ++, right --, top ++, bottom --;
}
for (int i = 0; i < n; i ++) {
for (int j = 0; j < m; j ++) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
利用碰撞探测法,可以写出特别短的代码
代码比我还长hhh(我22行和y总一样)
&& top < bottom && left < right这种边界情况怎么想出来的,太厉害了吧
同问,为啥呢
每一轮循环结束边界点更新后,假如top==bottom,这时在第二轮我们进行向←走时,那么我们就原路返回了(因为这时我们将要走的横行即bottom和我们来的时候走的横行top是同一横行)
我对着草稿纸花了五六分钟才看明白这两个边界问题,就是为了防止最后两个for循环在左右边界相等或者上下边界相等的时候继续读入导致覆盖前面的
通俗易懂牛比1
牛
两个数据TLE了,求大神指教
先在数组最外层顺时间转上一圈,然后最外层向内缩一层,循环往复直至四个边界相等结束
牛牛牛
这就是y总说的”需要写4个循环,代码比较长”的代码吧.佩服,通俗易懂的!
真好
666666
这思路挺好
思路嘎嘎清晰,两个字nb
牛的,思路很稳
好厉害的思路,太棒了!
棒棒棒
为什么矩阵要在main外面声明才有效呀,我在main里面声明数据大了就会错
函数体里面的数据都是放在栈里面,有大小限制,一般是1MB左右,函数体外是在堆中,基本没有限制,大小取决于你的电脑内存大小。更具体的你可以百度。
好的!谢谢您
代码比我还长hhh(我22行和y总一样)
代码比我还长hhh(我22行和y总一样)
代码比我还长hhh(我22行和y总一样)