用两个变量贮存坐标,按题目要求if判断了事。
#include<bits/stdc++.h>
using namespace std;
int n;
int ha[43][43];
int main(){
// freopen("magic.in","r",stdin);
// freopen("magic.out","w",stdout);
scanf("%d",&n);
int x=1,y=(n>>1)+1;
ha[x][y]=1;
for(int z=2;z<=n*n;++z){
if(x==1){
if(y!=n){
x=n;
++y;
ha[x][y]=z;
}
else {
++x;
ha[x][y]=z;
}
}
else if(y==n){
y=1;
--x;
ha[x][y]=z;
}
else{
if(ha[x-1][y+1]){
++x;
ha[x][y]=z;
}
else{
--x;
++y;
ha[x][y]=z;
}
}
}
for(int z=1;z<=n;++z){
printf("%d",ha[z][1]);
for(int y=2;y<=n;++y) printf(" %d",ha[z][y]);
printf("\n");
}
}