```cpp
#include<bits/stdc++.h>
using namespace std;
int a[10][10];
int main(){
int n, flag = 1 , x = 1, y = 0;
scanf("%d", &n);
while (flag <= n * n) {
while (!a[x][y + 1] && y < n) a[x][++y] = flag++;
while (!a[x + 1][y] && x < n) a[++x][y] = flag++;
while (!a[x][y - 1] && y > 1) a[x][--y] = flag++;
while (!a[x - 1][y] && x > 1) a[--x][y] = flag++;
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j)
printf("%3d ", a[i][j]);
printf("\n");
}
return 0;
}
```
现在试一下。
by syhx @ 2023-07-20 21:14:51
~~如果可以请关注一下~~
by syhx @ 2023-07-20 21:15:22
一个死循环。
你的第一次循环
```cpp
while (!a[x][y + 1] && y < n) a[x][++y] = ++flag;
```
中,当a[x][y+1]==0后,a[x+1][y]等于0.然后flag就卡在n上面了。
by Jianbing_Juan @ 2023-07-20 21:20:14