#include<stdio.h>
int main(){
int n;int count=1;int m;
scanf("%d",&m);n=m;
int a[m][m];int i;int j;
for(i=1;i<=m;i++){
for(j=1;j<=m;j++){
a[i][j]=1; }
} //构造一个二维数组
int u;
for(u=1;u<=n/2;u++){
for(i=u,j=u;j<=n-u;j++,count++){
a[i][j]=count;
}
for(i=u,j=n-u+1;i<=n-u;i++,count++){
a[i][j]=count;
}
for(i=n-u+1,j=n-u+1;j>=u+1;j--,count++){
a[i][j]=count;
}
for(i=n-u+1 ,j=u;i>=u+1;i--,count++){
a[i][j]=count;
}
}
if(n%2==1){
int y;
y=n/2+1;
a[y][y]=n*n;
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("%4d",a[i][j]);
}
printf("\n");}
return 0;
}
用这个试试
#include<stdio.h>
int a[20][20];
int main() {
int n, k = 1, direct = 4; //direct:1向上 2向下 3向左 4向右
scanf("%d", &n);
int i = 0, j = 0;
while(k <= n * n) {
if(a[i][j] == 0) {
a[i][j] = k;
k++;
}
if(direct == 1) { //向上
i--;//行减1
if(i == -1 || a[i][j] != 0) {
direct = 4;
i++;
j++;
}
} else if(direct == 2) { //向下
i++;//行加1
if(i == n || a[i][j] != 0) {
direct = 3;
i--;
j--;
}
} else if(direct == 3) { //向左
j--;//列减1
if(j == -1 || a[i][j] != 0) {
direct = 1;
i--;
j++;
}
} else if(direct == 4) { //向右
j++;//列加1
if(j == n || a[i][j] != 0) {
direct = 2;
i++;
j--;
}
}
}
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
printf("%4d ", a[i][j]);
}
printf("\n");
}
return 0;
}