输出换成%2d也不对捏
by zKT239 @ 2024-04-11 21:08:18
```cpp
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int a[n][n];
int op = 1;
int top=0,di=n-1,z=0,y=n-1;
while (op<=n*n)
{
for(int j=z;j<=y;j++)
a[top][j] = op++;
top++;
for (int i=top;i<=di;i++)
a[i][y] = op++;
y--;
for (int j=y;j>=z;j--)
a[di][j] = op++;
di--;
for (int i=di;i>=top;i--)
a[i][z] = op++;
z++;
}
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
if(a[i][j] < 10) {//判断要占用几个空格
printf(" %d",a[i][j]);
}
else {
printf(" %d",a[i][j]);
}
}
printf("\n");
}
return 0;
}
```
by iamsh @ 2024-04-11 21:26:17
@[zKT239](/user/1068201) 要换成%3d……题目说了每个数占用3个空格。
by lpx0228 @ 2024-04-27 11:29:15
@[lpx0228](/user/1273463) 好滴,感谢
by zKT239 @ 2024-05-02 14:56:37
```cpp
#include<bits/stdc++.h>
using namespace std;
long long a[10][10];
int main(){
long long dx[4]={0,1,0,-1};
long long dy[4]={1,0,-1,0};
long long i,j,n,num,d;
cin>>n;
for(i=0;i<=n+1;i++){
for(j=0;j<=n+1;j++){
a[i][j]=-1;
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
a[i][j]=0;
}
}
i=1;
j=1;
d=0;
for(num=1;num<=n*n;num++){
a[i][j]=num;
if(a[i+dx[d]][j+dy[d]]!=0){
d=(d+1)%4;
}
i+=dx[d];
j+=dy[d];
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
cout.width(3);
cout<<a[i][j];
}
cout<<"\n";
}
}
```
试试 ~~sqlm~~
by E303 @ 2024-05-06 21:35:31