题目:
思路:
利用数组和条件限定数组a[x,y]中的x与y的走向即可(但是有个bug就是当for中的i限定的条件为i<=m*n以及删掉所有if判断句时会出现bug,不管怎么样他都不会就得最后有个空点为空点。而一直在n=n*m中循环)但是如下列代码加入判断语句时他才会不卡在循环中(对我来说,上面括号和下面代码表达意思都是一样会正常输出的吧“脑壳痛”) ”但画个图就清楚了。“
代码:
#include<iostream>
using namespace std;
int a[101][101];
int main()
{
int n, m; cin >> n >> m;
int x = 1, y = 1;
for (int i = 1; i < n * m; )
{
while (!a[x][y+1]&&y<m)
{
a[x][y++] = i++;
}
//
if (i == n * m)a[x++][y] = i++;
while (!a[x + 1][y] && x < n)
{
a[x++][y] = i++;
}
//
if (i == n * m)a[x][y--] = i++;
while (!a[x][y - 1] && y > 1)
{
a[x][y--] = i++;
}
//
if (i == n * m)a[x--][y] = i++;
while (!a[x - 1][y]&&x>1)
{
a[x--][y] = i++;
}
//
if (i == n * m)a[x][y++] = i++;
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cout << a[i][j] << " ";
}cout << endl;
}
return 0;
}
如图,哎低级错误。(多想还不如动手康康)